// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Dataflow API Version v1b3
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/dataflow'>Google Dataflow API</a>
 *      <tr><th>API Version<td>v1b3
 *      <tr><th>API Rev<td>20170317 (806)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/dataflow'>
 *              https://cloud.google.com/dataflow</a>
 *      <tr><th>Discovery Name<td>dataflow
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Dataflow API can be found at
 * <a href='https://cloud.google.com/dataflow'>https://cloud.google.com/dataflow</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Dataflow.v1b3
{
    /// <summary>The Dataflow Service.</summary>
    public class DataflowService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1b3";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public DataflowService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public DataflowService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            projects = new ProjectsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "dataflow"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://dataflow.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Dataflow API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>View your email address</summary>
            public static string UserinfoEmail = "https://www.googleapis.com/auth/userinfo.email";

        }



        private readonly ProjectsResource projects;

        /// <summary>Gets the Projects resource.</summary>
        public virtual ProjectsResource Projects
        {
            get { return projects; }
        }
    }

    ///<summary>A base abstract class for Dataflow requests.</summary>
    public abstract class DataflowBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new DataflowBaseServiceRequest instance.</summary>
        protected DataflowBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes Dataflow parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "projects" collection of methods.</summary>
    public class ProjectsResource
    {
        private const string Resource = "projects";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ProjectsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            jobs = new JobsResource(service);
            locations = new LocationsResource(service);
            templates = new TemplatesResource(service);

        }

        private readonly JobsResource jobs;

        /// <summary>Gets the Jobs resource.</summary>
        public virtual JobsResource Jobs
        {
            get { return jobs; }
        }

        /// <summary>The "jobs" collection of methods.</summary>
        public class JobsResource
        {
            private const string Resource = "jobs";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public JobsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
                debug = new DebugResource(service);
                messages = new MessagesResource(service);
                workItems = new WorkItemsResource(service);

            }

            private readonly DebugResource debug;

            /// <summary>Gets the Debug resource.</summary>
            public virtual DebugResource Debug
            {
                get { return debug; }
            }

            /// <summary>The "debug" collection of methods.</summary>
            public class DebugResource
            {
                private const string Resource = "debug";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public DebugResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Get encoded debug configuration for component. Not cacheable.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">The project id.</param>
                /// <param name="jobId">The job id.</param>
                public virtual GetConfigRequest GetConfig(Google.Apis.Dataflow.v1b3.Data.GetDebugConfigRequest body, string projectId, string jobId)
                {
                    return new GetConfigRequest(service, body, projectId, jobId);
                }

                /// <summary>Get encoded debug configuration for component. Not cacheable.</summary>
                public class GetConfigRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.GetDebugConfigResponse>
                {
                    /// <summary>Constructs a new GetConfig request.</summary>
                    public GetConfigRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.GetDebugConfigRequest body, string projectId, string jobId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        JobId = jobId;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The project id.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The job id.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string JobId { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Dataflow.v1b3.Data.GetDebugConfigRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "getConfig"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/jobs/{jobId}/debug/getConfig"; }
                    }

                    /// <summary>Initializes GetConfig parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "jobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "jobId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Send encoded debug capture data for component.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">The project id.</param>
                /// <param name="jobId">The job id.</param>
                public virtual SendCaptureRequest SendCapture(Google.Apis.Dataflow.v1b3.Data.SendDebugCaptureRequest body, string projectId, string jobId)
                {
                    return new SendCaptureRequest(service, body, projectId, jobId);
                }

                /// <summary>Send encoded debug capture data for component.</summary>
                public class SendCaptureRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.SendDebugCaptureResponse>
                {
                    /// <summary>Constructs a new SendCapture request.</summary>
                    public SendCaptureRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.SendDebugCaptureRequest body, string projectId, string jobId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        JobId = jobId;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The project id.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The job id.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string JobId { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Dataflow.v1b3.Data.SendDebugCaptureRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "sendCapture"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/jobs/{jobId}/debug/sendCapture"; }
                    }

                    /// <summary>Initializes SendCapture parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "jobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "jobId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }
            private readonly MessagesResource messages;

            /// <summary>Gets the Messages resource.</summary>
            public virtual MessagesResource Messages
            {
                get { return messages; }
            }

            /// <summary>The "messages" collection of methods.</summary>
            public class MessagesResource
            {
                private const string Resource = "messages";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public MessagesResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Request the job status.</summary>
                /// <param name="projectId">A project id.</param>
                /// <param name="jobId">The job to get messages
                /// about.</param>
                public virtual ListRequest List(string projectId, string jobId)
                {
                    return new ListRequest(service, projectId, jobId);
                }

                /// <summary>Request the job status.</summary>
                public class ListRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.ListJobMessagesResponse>
                {
                    /// <summary>Constructs a new List request.</summary>
                    public ListRequest(Google.Apis.Services.IClientService service, string projectId, string jobId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        JobId = jobId;
                        InitParameters();
                    }


                    /// <summary>A project id.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The job to get messages about.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string JobId { get; private set; }

                    /// <summary>Return only messages with timestamps < end_time. The default is now (i.e. return up to
                    /// the latest messages available).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("endTime", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual object EndTime { get; set; }

                    /// <summary>The location which contains the job specified by job_id.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string Location { get; set; }

                    /// <summary>If supplied, this should be the value of next_page_token returned by an earlier call.
                    /// This will cause the next page of results to be returned.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// <summary>If specified, return only messages with timestamps >= start_time. The default is the
                    /// job creation time (i.e. beginning of messages).</summary>
                    [Google.Apis.Util.RequestParameterAttribute("startTime", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual object StartTime { get; set; }

                    /// <summary>If specified, determines the maximum number of messages to return.  If unspecified, the
                    /// service may choose an appropriate default, or may return an arbitrarily large number of
                    /// results.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }

                    /// <summary>Filter to only get messages with importance >= level</summary>
                    [Google.Apis.Util.RequestParameterAttribute("minimumImportance", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<MinimumImportanceEnum> MinimumImportance { get; set; }

                    /// <summary>Filter to only get messages with importance >= level</summary>
                    public enum MinimumImportanceEnum
                    {
                        [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_IMPORTANCE_UNKNOWN")]
                        JOBMESSAGEIMPORTANCEUNKNOWN,
                        [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_DEBUG")]
                        JOBMESSAGEDEBUG,
                        [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_DETAILED")]
                        JOBMESSAGEDETAILED,
                        [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_BASIC")]
                        JOBMESSAGEBASIC,
                        [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_WARNING")]
                        JOBMESSAGEWARNING,
                        [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_ERROR")]
                        JOBMESSAGEERROR,
                    }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "list"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/jobs/{jobId}/messages"; }
                    }

                    /// <summary>Initializes List parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "jobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "jobId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "endTime", new Google.Apis.Discovery.Parameter
                            {
                                Name = "endTime",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "location", new Google.Apis.Discovery.Parameter
                            {
                                Name = "location",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageToken", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageToken",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "startTime", new Google.Apis.Discovery.Parameter
                            {
                                Name = "startTime",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageSize", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageSize",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "minimumImportance", new Google.Apis.Discovery.Parameter
                            {
                                Name = "minimumImportance",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }
            private readonly WorkItemsResource workItems;

            /// <summary>Gets the WorkItems resource.</summary>
            public virtual WorkItemsResource WorkItems
            {
                get { return workItems; }
            }

            /// <summary>The "workItems" collection of methods.</summary>
            public class WorkItemsResource
            {
                private const string Resource = "workItems";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public WorkItemsResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;

                }


                /// <summary>Leases a dataflow WorkItem to run.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">Identifies the project this worker belongs to.</param>
                /// <param
                /// name="jobId">Identifies the workflow job this worker belongs to.</param>
                public virtual LeaseRequest Lease(Google.Apis.Dataflow.v1b3.Data.LeaseWorkItemRequest body, string projectId, string jobId)
                {
                    return new LeaseRequest(service, body, projectId, jobId);
                }

                /// <summary>Leases a dataflow WorkItem to run.</summary>
                public class LeaseRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.LeaseWorkItemResponse>
                {
                    /// <summary>Constructs a new Lease request.</summary>
                    public LeaseRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.LeaseWorkItemRequest body, string projectId, string jobId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        JobId = jobId;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>Identifies the project this worker belongs to.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>Identifies the workflow job this worker belongs to.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string JobId { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Dataflow.v1b3.Data.LeaseWorkItemRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "lease"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/jobs/{jobId}/workItems:lease"; }
                    }

                    /// <summary>Initializes Lease parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "jobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "jobId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Reports the status of dataflow WorkItems leased by a worker.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">The project which owns the WorkItem's job.</param>
                /// <param name="jobId">The job which
                /// the WorkItem is part of.</param>
                public virtual ReportStatusRequest ReportStatus(Google.Apis.Dataflow.v1b3.Data.ReportWorkItemStatusRequest body, string projectId, string jobId)
                {
                    return new ReportStatusRequest(service, body, projectId, jobId);
                }

                /// <summary>Reports the status of dataflow WorkItems leased by a worker.</summary>
                public class ReportStatusRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.ReportWorkItemStatusResponse>
                {
                    /// <summary>Constructs a new ReportStatus request.</summary>
                    public ReportStatusRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.ReportWorkItemStatusRequest body, string projectId, string jobId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        JobId = jobId;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The project which owns the WorkItem's job.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The job which the WorkItem is part of.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string JobId { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Dataflow.v1b3.Data.ReportWorkItemStatusRequest Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "reportStatus"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/jobs/{jobId}/workItems:reportStatus"; }
                    }

                    /// <summary>Initializes ReportStatus parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "jobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "jobId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }

            /// <summary>Creates a Cloud Dataflow job.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="projectId">The ID of the Cloud Platform project that the job belongs to.</param>
            public virtual CreateRequest Create(Google.Apis.Dataflow.v1b3.Data.Job body, string projectId)
            {
                return new CreateRequest(service, body, projectId);
            }

            /// <summary>Creates a Cloud Dataflow job.</summary>
            public class CreateRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.Job>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.Job body, string projectId)
                    : base(service)
                {
                    ProjectId = projectId;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The ID of the Cloud Platform project that the job belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }

                /// <summary>The level of information requested in response.</summary>
                [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ViewEnum> View { get; set; }

                /// <summary>The level of information requested in response.</summary>
                public enum ViewEnum
                {
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_UNKNOWN")]
                    JOBVIEWUNKNOWN,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_SUMMARY")]
                    JOBVIEWSUMMARY,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_ALL")]
                    JOBVIEWALL,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_DESCRIPTION")]
                    JOBVIEWDESCRIPTION,
                }

                /// <summary>The location that contains this job.</summary>
                [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Location { get; set; }

                /// <summary>Deprecated. This field is now in the Job message.</summary>
                [Google.Apis.Util.RequestParameterAttribute("replaceJobId", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string ReplaceJobId { get; set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Dataflow.v1b3.Data.Job Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1b3/projects/{projectId}/jobs"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "view", new Google.Apis.Discovery.Parameter
                        {
                            Name = "view",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "location", new Google.Apis.Discovery.Parameter
                        {
                            Name = "location",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "replaceJobId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "replaceJobId",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Gets the state of the specified Cloud Dataflow job.</summary>
            /// <param name="projectId">The ID of the Cloud Platform project that the job belongs to.</param>
            /// <param
            /// name="jobId">The job ID.</param>
            public virtual GetRequest Get(string projectId, string jobId)
            {
                return new GetRequest(service, projectId, jobId);
            }

            /// <summary>Gets the state of the specified Cloud Dataflow job.</summary>
            public class GetRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.Job>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string projectId, string jobId)
                    : base(service)
                {
                    ProjectId = projectId;
                    JobId = jobId;
                    InitParameters();
                }


                /// <summary>The ID of the Cloud Platform project that the job belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }

                /// <summary>The job ID.</summary>
                [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string JobId { get; private set; }

                /// <summary>The level of information requested in response.</summary>
                [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ViewEnum> View { get; set; }

                /// <summary>The level of information requested in response.</summary>
                public enum ViewEnum
                {
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_UNKNOWN")]
                    JOBVIEWUNKNOWN,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_SUMMARY")]
                    JOBVIEWSUMMARY,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_ALL")]
                    JOBVIEWALL,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_DESCRIPTION")]
                    JOBVIEWDESCRIPTION,
                }

                /// <summary>The location that contains this job.</summary>
                [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Location { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1b3/projects/{projectId}/jobs/{jobId}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "jobId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "jobId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "view", new Google.Apis.Discovery.Parameter
                        {
                            Name = "view",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "location", new Google.Apis.Discovery.Parameter
                        {
                            Name = "location",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Request the job status.</summary>
            /// <param name="projectId">A project id.</param>
            /// <param name="jobId">The job to get messages for.</param>
            public virtual GetMetricsRequest GetMetrics(string projectId, string jobId)
            {
                return new GetMetricsRequest(service, projectId, jobId);
            }

            /// <summary>Request the job status.</summary>
            public class GetMetricsRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.JobMetrics>
            {
                /// <summary>Constructs a new GetMetrics request.</summary>
                public GetMetricsRequest(Google.Apis.Services.IClientService service, string projectId, string jobId)
                    : base(service)
                {
                    ProjectId = projectId;
                    JobId = jobId;
                    InitParameters();
                }


                /// <summary>A project id.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }

                /// <summary>The job to get messages for.</summary>
                [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string JobId { get; private set; }

                /// <summary>The location which contains the job specified by job_id.</summary>
                [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Location { get; set; }

                /// <summary>Return only metric data that has changed since this time. Default is to return all
                /// information about all metrics for the job.</summary>
                [Google.Apis.Util.RequestParameterAttribute("startTime", Google.Apis.Util.RequestParameterType.Query)]
                public virtual object StartTime { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "getMetrics"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1b3/projects/{projectId}/jobs/{jobId}/metrics"; }
                }

                /// <summary>Initializes GetMetrics parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "jobId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "jobId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "location", new Google.Apis.Discovery.Parameter
                        {
                            Name = "location",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "startTime", new Google.Apis.Discovery.Parameter
                        {
                            Name = "startTime",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>List the jobs of a project.</summary>
            /// <param name="projectId">The project which owns the jobs.</param>
            public virtual ListRequest List(string projectId)
            {
                return new ListRequest(service, projectId);
            }

            /// <summary>List the jobs of a project.</summary>
            public class ListRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.ListJobsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string projectId)
                    : base(service)
                {
                    ProjectId = projectId;
                    InitParameters();
                }


                /// <summary>The project which owns the jobs.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }

                /// <summary>The kind of filter to use.</summary>
                [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<FilterEnum> Filter { get; set; }

                /// <summary>The kind of filter to use.</summary>
                public enum FilterEnum
                {
                    [Google.Apis.Util.StringValueAttribute("UNKNOWN")]
                    UNKNOWN,
                    [Google.Apis.Util.StringValueAttribute("ALL")]
                    ALL,
                    [Google.Apis.Util.StringValueAttribute("TERMINATED")]
                    TERMINATED,
                    [Google.Apis.Util.StringValueAttribute("ACTIVE")]
                    ACTIVE,
                }

                /// <summary>The location that contains this job.</summary>
                [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Location { get; set; }

                /// <summary>Set this to the 'next_page_token' field of a previous response to request additional
                /// results in a long list.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>If there are many jobs, limit response to at most this many. The actual number of jobs
                /// returned will be the lesser of max_responses and an unspecified server-defined limit.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>Level of information requested in response. Default is `JOB_VIEW_SUMMARY`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ViewEnum> View { get; set; }

                /// <summary>Level of information requested in response. Default is `JOB_VIEW_SUMMARY`.</summary>
                public enum ViewEnum
                {
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_UNKNOWN")]
                    JOBVIEWUNKNOWN,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_SUMMARY")]
                    JOBVIEWSUMMARY,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_ALL")]
                    JOBVIEWALL,
                    [Google.Apis.Util.StringValueAttribute("JOB_VIEW_DESCRIPTION")]
                    JOBVIEWDESCRIPTION,
                }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1b3/projects/{projectId}/jobs"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "filter", new Google.Apis.Discovery.Parameter
                        {
                            Name = "filter",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "location", new Google.Apis.Discovery.Parameter
                        {
                            Name = "location",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "view", new Google.Apis.Discovery.Parameter
                        {
                            Name = "view",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Updates the state of an existing Cloud Dataflow job.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="projectId">The ID of the Cloud Platform project that the job belongs to.</param>
            /// <param
            /// name="jobId">The job ID.</param>
            public virtual UpdateRequest Update(Google.Apis.Dataflow.v1b3.Data.Job body, string projectId, string jobId)
            {
                return new UpdateRequest(service, body, projectId, jobId);
            }

            /// <summary>Updates the state of an existing Cloud Dataflow job.</summary>
            public class UpdateRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.Job>
            {
                /// <summary>Constructs a new Update request.</summary>
                public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.Job body, string projectId, string jobId)
                    : base(service)
                {
                    ProjectId = projectId;
                    JobId = jobId;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The ID of the Cloud Platform project that the job belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }

                /// <summary>The job ID.</summary>
                [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string JobId { get; private set; }

                /// <summary>The location that contains this job.</summary>
                [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string Location { get; set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Dataflow.v1b3.Data.Job Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "update"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "PUT"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1b3/projects/{projectId}/jobs/{jobId}"; }
                }

                /// <summary>Initializes Update parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "jobId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "jobId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "location", new Google.Apis.Discovery.Parameter
                        {
                            Name = "location",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly LocationsResource locations;

        /// <summary>Gets the Locations resource.</summary>
        public virtual LocationsResource Locations
        {
            get { return locations; }
        }

        /// <summary>The "locations" collection of methods.</summary>
        public class LocationsResource
        {
            private const string Resource = "locations";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public LocationsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
                jobs = new JobsResource(service);

            }

            private readonly JobsResource jobs;

            /// <summary>Gets the Jobs resource.</summary>
            public virtual JobsResource Jobs
            {
                get { return jobs; }
            }

            /// <summary>The "jobs" collection of methods.</summary>
            public class JobsResource
            {
                private const string Resource = "jobs";

                /// <summary>The service which this resource belongs to.</summary>
                private readonly Google.Apis.Services.IClientService service;

                /// <summary>Constructs a new resource.</summary>
                public JobsResource(Google.Apis.Services.IClientService service)
                {
                    this.service = service;
                    messages = new MessagesResource(service);
                    workItems = new WorkItemsResource(service);

                }

                private readonly MessagesResource messages;

                /// <summary>Gets the Messages resource.</summary>
                public virtual MessagesResource Messages
                {
                    get { return messages; }
                }

                /// <summary>The "messages" collection of methods.</summary>
                public class MessagesResource
                {
                    private const string Resource = "messages";

                    /// <summary>The service which this resource belongs to.</summary>
                    private readonly Google.Apis.Services.IClientService service;

                    /// <summary>Constructs a new resource.</summary>
                    public MessagesResource(Google.Apis.Services.IClientService service)
                    {
                        this.service = service;

                    }


                    /// <summary>Request the job status.</summary>
                    /// <param name="projectId">A project id.</param>
                    /// <param name="location">The location which contains the job
                    /// specified by job_id.</param>
                    /// <param name="jobId">The job to get messages about.</param>
                    public virtual ListRequest List(string projectId, string location, string jobId)
                    {
                        return new ListRequest(service, projectId, location, jobId);
                    }

                    /// <summary>Request the job status.</summary>
                    public class ListRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.ListJobMessagesResponse>
                    {
                        /// <summary>Constructs a new List request.</summary>
                        public ListRequest(Google.Apis.Services.IClientService service, string projectId, string location, string jobId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Location = location;
                            JobId = jobId;
                            InitParameters();
                        }


                        /// <summary>A project id.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The location which contains the job specified by job_id.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Location { get; private set; }

                        /// <summary>The job to get messages about.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string JobId { get; private set; }

                        /// <summary>Filter to only get messages with importance >= level</summary>
                        [Google.Apis.Util.RequestParameterAttribute("minimumImportance", Google.Apis.Util.RequestParameterType.Query)]
                        public virtual System.Nullable<MinimumImportanceEnum> MinimumImportance { get; set; }

                        /// <summary>Filter to only get messages with importance >= level</summary>
                        public enum MinimumImportanceEnum
                        {
                            [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_IMPORTANCE_UNKNOWN")]
                            JOBMESSAGEIMPORTANCEUNKNOWN,
                            [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_DEBUG")]
                            JOBMESSAGEDEBUG,
                            [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_DETAILED")]
                            JOBMESSAGEDETAILED,
                            [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_BASIC")]
                            JOBMESSAGEBASIC,
                            [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_WARNING")]
                            JOBMESSAGEWARNING,
                            [Google.Apis.Util.StringValueAttribute("JOB_MESSAGE_ERROR")]
                            JOBMESSAGEERROR,
                        }

                        /// <summary>Return only messages with timestamps < end_time. The default is now (i.e. return up
                        /// to the latest messages available).</summary>
                        [Google.Apis.Util.RequestParameterAttribute("endTime", Google.Apis.Util.RequestParameterType.Query)]
                        public virtual object EndTime { get; set; }

                        /// <summary>If supplied, this should be the value of next_page_token returned by an earlier
                        /// call. This will cause the next page of results to be returned.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                        public virtual string PageToken { get; set; }

                        /// <summary>If specified, return only messages with timestamps >= start_time. The default is
                        /// the job creation time (i.e. beginning of messages).</summary>
                        [Google.Apis.Util.RequestParameterAttribute("startTime", Google.Apis.Util.RequestParameterType.Query)]
                        public virtual object StartTime { get; set; }

                        /// <summary>If specified, determines the maximum number of messages to return.  If unspecified,
                        /// the service may choose an appropriate default, or may return an arbitrarily large number of
                        /// results.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                        public virtual System.Nullable<int> PageSize { get; set; }


                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "list"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "GET"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/messages"; }
                        }

                        /// <summary>Initializes List parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "location", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "location",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "jobId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "jobId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "minimumImportance", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "minimumImportance",
                                    IsRequired = false,
                                    ParameterType = "query",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "endTime", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "endTime",
                                    IsRequired = false,
                                    ParameterType = "query",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "pageToken", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "pageToken",
                                    IsRequired = false,
                                    ParameterType = "query",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "startTime", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "startTime",
                                    IsRequired = false,
                                    ParameterType = "query",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "pageSize", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "pageSize",
                                    IsRequired = false,
                                    ParameterType = "query",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }
                }
                private readonly WorkItemsResource workItems;

                /// <summary>Gets the WorkItems resource.</summary>
                public virtual WorkItemsResource WorkItems
                {
                    get { return workItems; }
                }

                /// <summary>The "workItems" collection of methods.</summary>
                public class WorkItemsResource
                {
                    private const string Resource = "workItems";

                    /// <summary>The service which this resource belongs to.</summary>
                    private readonly Google.Apis.Services.IClientService service;

                    /// <summary>Constructs a new resource.</summary>
                    public WorkItemsResource(Google.Apis.Services.IClientService service)
                    {
                        this.service = service;

                    }


                    /// <summary>Leases a dataflow WorkItem to run.</summary>
                    /// <param name="body">The body of the request.</param>
                    /// <param name="projectId">Identifies the project this worker belongs to.</param>
                    /// <param name="location">The
                    /// location which contains the WorkItem's job.</param>
                    /// <param name="jobId">Identifies the workflow job this
                    /// worker belongs to.</param>
                    public virtual LeaseRequest Lease(Google.Apis.Dataflow.v1b3.Data.LeaseWorkItemRequest body, string projectId, string location, string jobId)
                    {
                        return new LeaseRequest(service, body, projectId, location, jobId);
                    }

                    /// <summary>Leases a dataflow WorkItem to run.</summary>
                    public class LeaseRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.LeaseWorkItemResponse>
                    {
                        /// <summary>Constructs a new Lease request.</summary>
                        public LeaseRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.LeaseWorkItemRequest body, string projectId, string location, string jobId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Location = location;
                            JobId = jobId;
                            Body = body;
                            InitParameters();
                        }


                        /// <summary>Identifies the project this worker belongs to.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The location which contains the WorkItem's job.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Location { get; private set; }

                        /// <summary>Identifies the workflow job this worker belongs to.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string JobId { get; private set; }


                        /// <summary>Gets or sets the body of this request.</summary>
                        Google.Apis.Dataflow.v1b3.Data.LeaseWorkItemRequest Body { get; set; }

                        ///<summary>Returns the body of the request.</summary>
                        protected override object GetBody() { return Body; }

                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "lease"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "POST"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:lease"; }
                        }

                        /// <summary>Initializes Lease parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "location", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "location",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "jobId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "jobId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }

                    /// <summary>Reports the status of dataflow WorkItems leased by a worker.</summary>
                    /// <param name="body">The body of the request.</param>
                    /// <param name="projectId">The project which owns the WorkItem's job.</param>
                    /// <param name="location">The
                    /// location which contains the WorkItem's job.</param>
                    /// <param name="jobId">The job which the WorkItem is part
                    /// of.</param>
                    public virtual ReportStatusRequest ReportStatus(Google.Apis.Dataflow.v1b3.Data.ReportWorkItemStatusRequest body, string projectId, string location, string jobId)
                    {
                        return new ReportStatusRequest(service, body, projectId, location, jobId);
                    }

                    /// <summary>Reports the status of dataflow WorkItems leased by a worker.</summary>
                    public class ReportStatusRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.ReportWorkItemStatusResponse>
                    {
                        /// <summary>Constructs a new ReportStatus request.</summary>
                        public ReportStatusRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.ReportWorkItemStatusRequest body, string projectId, string location, string jobId)
                            : base(service)
                        {
                            ProjectId = projectId;
                            Location = location;
                            JobId = jobId;
                            Body = body;
                            InitParameters();
                        }


                        /// <summary>The project which owns the WorkItem's job.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string ProjectId { get; private set; }

                        /// <summary>The location which contains the WorkItem's job.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string Location { get; private set; }

                        /// <summary>The job which the WorkItem is part of.</summary>
                        [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                        public virtual string JobId { get; private set; }


                        /// <summary>Gets or sets the body of this request.</summary>
                        Google.Apis.Dataflow.v1b3.Data.ReportWorkItemStatusRequest Body { get; set; }

                        ///<summary>Returns the body of the request.</summary>
                        protected override object GetBody() { return Body; }

                        ///<summary>Gets the method name.</summary>
                        public override string MethodName
                        {
                            get { return "reportStatus"; }
                        }

                        ///<summary>Gets the HTTP method.</summary>
                        public override string HttpMethod
                        {
                            get { return "POST"; }
                        }

                        ///<summary>Gets the REST path.</summary>
                        public override string RestPath
                        {
                            get { return "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:reportStatus"; }
                        }

                        /// <summary>Initializes ReportStatus parameter list.</summary>
                        protected override void InitParameters()
                        {
                            base.InitParameters();

                            RequestParameters.Add(
                                "projectId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "projectId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "location", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "location",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                            RequestParameters.Add(
                                "jobId", new Google.Apis.Discovery.Parameter
                                {
                                    Name = "jobId",
                                    IsRequired = true,
                                    ParameterType = "path",
                                    DefaultValue = null,
                                    Pattern = null,
                                });
                        }

                    }
                }

                /// <summary>Creates a Cloud Dataflow job.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">The ID of the Cloud Platform project that the job belongs to.</param>
                /// <param
                /// name="location">The location that contains this job.</param>
                public virtual CreateRequest Create(Google.Apis.Dataflow.v1b3.Data.Job body, string projectId, string location)
                {
                    return new CreateRequest(service, body, projectId, location);
                }

                /// <summary>Creates a Cloud Dataflow job.</summary>
                public class CreateRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.Job>
                {
                    /// <summary>Constructs a new Create request.</summary>
                    public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.Job body, string projectId, string location)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Location = location;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The ID of the Cloud Platform project that the job belongs to.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The location that contains this job.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Location { get; private set; }

                    /// <summary>Deprecated. This field is now in the Job message.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("replaceJobId", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string ReplaceJobId { get; set; }

                    /// <summary>The level of information requested in response.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<ViewEnum> View { get; set; }

                    /// <summary>The level of information requested in response.</summary>
                    public enum ViewEnum
                    {
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_UNKNOWN")]
                        JOBVIEWUNKNOWN,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_SUMMARY")]
                        JOBVIEWSUMMARY,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_ALL")]
                        JOBVIEWALL,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_DESCRIPTION")]
                        JOBVIEWDESCRIPTION,
                    }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Dataflow.v1b3.Data.Job Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "create"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "POST"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/locations/{location}/jobs"; }
                    }

                    /// <summary>Initializes Create parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "location", new Google.Apis.Discovery.Parameter
                            {
                                Name = "location",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "replaceJobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "replaceJobId",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "view", new Google.Apis.Discovery.Parameter
                            {
                                Name = "view",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Gets the state of the specified Cloud Dataflow job.</summary>
                /// <param name="projectId">The ID of the Cloud Platform project that the job belongs to.</param>
                /// <param
                /// name="location">The location that contains this job.</param>
                /// <param name="jobId">The job ID.</param>
                public virtual GetRequest Get(string projectId, string location, string jobId)
                {
                    return new GetRequest(service, projectId, location, jobId);
                }

                /// <summary>Gets the state of the specified Cloud Dataflow job.</summary>
                public class GetRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.Job>
                {
                    /// <summary>Constructs a new Get request.</summary>
                    public GetRequest(Google.Apis.Services.IClientService service, string projectId, string location, string jobId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Location = location;
                        JobId = jobId;
                        InitParameters();
                    }


                    /// <summary>The ID of the Cloud Platform project that the job belongs to.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The location that contains this job.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Location { get; private set; }

                    /// <summary>The job ID.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string JobId { get; private set; }

                    /// <summary>The level of information requested in response.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<ViewEnum> View { get; set; }

                    /// <summary>The level of information requested in response.</summary>
                    public enum ViewEnum
                    {
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_UNKNOWN")]
                        JOBVIEWUNKNOWN,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_SUMMARY")]
                        JOBVIEWSUMMARY,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_ALL")]
                        JOBVIEWALL,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_DESCRIPTION")]
                        JOBVIEWDESCRIPTION,
                    }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "get"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}"; }
                    }

                    /// <summary>Initializes Get parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "location", new Google.Apis.Discovery.Parameter
                            {
                                Name = "location",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "jobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "jobId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "view", new Google.Apis.Discovery.Parameter
                            {
                                Name = "view",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Request the job status.</summary>
                /// <param name="projectId">A project id.</param>
                /// <param name="location">The location which contains the job
                /// specified by job_id.</param>
                /// <param name="jobId">The job to get messages for.</param>
                public virtual GetMetricsRequest GetMetrics(string projectId, string location, string jobId)
                {
                    return new GetMetricsRequest(service, projectId, location, jobId);
                }

                /// <summary>Request the job status.</summary>
                public class GetMetricsRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.JobMetrics>
                {
                    /// <summary>Constructs a new GetMetrics request.</summary>
                    public GetMetricsRequest(Google.Apis.Services.IClientService service, string projectId, string location, string jobId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Location = location;
                        JobId = jobId;
                        InitParameters();
                    }


                    /// <summary>A project id.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The location which contains the job specified by job_id.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Location { get; private set; }

                    /// <summary>The job to get messages for.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string JobId { get; private set; }

                    /// <summary>Return only metric data that has changed since this time. Default is to return all
                    /// information about all metrics for the job.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("startTime", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual object StartTime { get; set; }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "getMetrics"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/metrics"; }
                    }

                    /// <summary>Initializes GetMetrics parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "location", new Google.Apis.Discovery.Parameter
                            {
                                Name = "location",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "jobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "jobId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "startTime", new Google.Apis.Discovery.Parameter
                            {
                                Name = "startTime",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>List the jobs of a project.</summary>
                /// <param name="projectId">The project which owns the jobs.</param>
                /// <param name="location">The location that
                /// contains this job.</param>
                public virtual ListRequest List(string projectId, string location)
                {
                    return new ListRequest(service, projectId, location);
                }

                /// <summary>List the jobs of a project.</summary>
                public class ListRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.ListJobsResponse>
                {
                    /// <summary>Constructs a new List request.</summary>
                    public ListRequest(Google.Apis.Services.IClientService service, string projectId, string location)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Location = location;
                        InitParameters();
                    }


                    /// <summary>The project which owns the jobs.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The location that contains this job.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Location { get; private set; }

                    /// <summary>The kind of filter to use.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<FilterEnum> Filter { get; set; }

                    /// <summary>The kind of filter to use.</summary>
                    public enum FilterEnum
                    {
                        [Google.Apis.Util.StringValueAttribute("UNKNOWN")]
                        UNKNOWN,
                        [Google.Apis.Util.StringValueAttribute("ALL")]
                        ALL,
                        [Google.Apis.Util.StringValueAttribute("TERMINATED")]
                        TERMINATED,
                        [Google.Apis.Util.StringValueAttribute("ACTIVE")]
                        ACTIVE,
                    }

                    /// <summary>Set this to the 'next_page_token' field of a previous response to request additional
                    /// results in a long list.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual string PageToken { get; set; }

                    /// <summary>If there are many jobs, limit response to at most this many. The actual number of jobs
                    /// returned will be the lesser of max_responses and an unspecified server-defined limit.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<int> PageSize { get; set; }

                    /// <summary>Level of information requested in response. Default is `JOB_VIEW_SUMMARY`.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
                    public virtual System.Nullable<ViewEnum> View { get; set; }

                    /// <summary>Level of information requested in response. Default is `JOB_VIEW_SUMMARY`.</summary>
                    public enum ViewEnum
                    {
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_UNKNOWN")]
                        JOBVIEWUNKNOWN,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_SUMMARY")]
                        JOBVIEWSUMMARY,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_ALL")]
                        JOBVIEWALL,
                        [Google.Apis.Util.StringValueAttribute("JOB_VIEW_DESCRIPTION")]
                        JOBVIEWDESCRIPTION,
                    }


                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "list"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "GET"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/locations/{location}/jobs"; }
                    }

                    /// <summary>Initializes List parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "location", new Google.Apis.Discovery.Parameter
                            {
                                Name = "location",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "filter", new Google.Apis.Discovery.Parameter
                            {
                                Name = "filter",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageToken", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageToken",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "pageSize", new Google.Apis.Discovery.Parameter
                            {
                                Name = "pageSize",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "view", new Google.Apis.Discovery.Parameter
                            {
                                Name = "view",
                                IsRequired = false,
                                ParameterType = "query",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }

                /// <summary>Updates the state of an existing Cloud Dataflow job.</summary>
                /// <param name="body">The body of the request.</param>
                /// <param name="projectId">The ID of the Cloud Platform project that the job belongs to.</param>
                /// <param
                /// name="location">The location that contains this job.</param>
                /// <param name="jobId">The job ID.</param>
                public virtual UpdateRequest Update(Google.Apis.Dataflow.v1b3.Data.Job body, string projectId, string location, string jobId)
                {
                    return new UpdateRequest(service, body, projectId, location, jobId);
                }

                /// <summary>Updates the state of an existing Cloud Dataflow job.</summary>
                public class UpdateRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.Job>
                {
                    /// <summary>Constructs a new Update request.</summary>
                    public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.Job body, string projectId, string location, string jobId)
                        : base(service)
                    {
                        ProjectId = projectId;
                        Location = location;
                        JobId = jobId;
                        Body = body;
                        InitParameters();
                    }


                    /// <summary>The ID of the Cloud Platform project that the job belongs to.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string ProjectId { get; private set; }

                    /// <summary>The location that contains this job.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("location", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string Location { get; private set; }

                    /// <summary>The job ID.</summary>
                    [Google.Apis.Util.RequestParameterAttribute("jobId", Google.Apis.Util.RequestParameterType.Path)]
                    public virtual string JobId { get; private set; }


                    /// <summary>Gets or sets the body of this request.</summary>
                    Google.Apis.Dataflow.v1b3.Data.Job Body { get; set; }

                    ///<summary>Returns the body of the request.</summary>
                    protected override object GetBody() { return Body; }

                    ///<summary>Gets the method name.</summary>
                    public override string MethodName
                    {
                        get { return "update"; }
                    }

                    ///<summary>Gets the HTTP method.</summary>
                    public override string HttpMethod
                    {
                        get { return "PUT"; }
                    }

                    ///<summary>Gets the REST path.</summary>
                    public override string RestPath
                    {
                        get { return "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}"; }
                    }

                    /// <summary>Initializes Update parameter list.</summary>
                    protected override void InitParameters()
                    {
                        base.InitParameters();

                        RequestParameters.Add(
                            "projectId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "projectId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "location", new Google.Apis.Discovery.Parameter
                            {
                                Name = "location",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                        RequestParameters.Add(
                            "jobId", new Google.Apis.Discovery.Parameter
                            {
                                Name = "jobId",
                                IsRequired = true,
                                ParameterType = "path",
                                DefaultValue = null,
                                Pattern = null,
                            });
                    }

                }
            }
        }
        private readonly TemplatesResource templates;

        /// <summary>Gets the Templates resource.</summary>
        public virtual TemplatesResource Templates
        {
            get { return templates; }
        }

        /// <summary>The "templates" collection of methods.</summary>
        public class TemplatesResource
        {
            private const string Resource = "templates";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public TemplatesResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Creates a Cloud Dataflow job from a template.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="projectId">Required. The ID of the Cloud Platform project that the job belongs to.</param>
            public virtual CreateRequest Create(Google.Apis.Dataflow.v1b3.Data.CreateJobFromTemplateRequest body, string projectId)
            {
                return new CreateRequest(service, body, projectId);
            }

            /// <summary>Creates a Cloud Dataflow job from a template.</summary>
            public class CreateRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.Job>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.CreateJobFromTemplateRequest body, string projectId)
                    : base(service)
                {
                    ProjectId = projectId;
                    Body = body;
                    InitParameters();
                }


                /// <summary>Required. The ID of the Cloud Platform project that the job belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Dataflow.v1b3.Data.CreateJobFromTemplateRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "create"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1b3/projects/{projectId}/templates"; }
                }

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Get the template associated with a template.</summary>
            /// <param name="projectId">Required. The ID of the Cloud Platform project that the job belongs to.</param>
            public virtual GetRequest Get(string projectId)
            {
                return new GetRequest(service, projectId);
            }

            /// <summary>Get the template associated with a template.</summary>
            public class GetRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.GetTemplateResponse>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string projectId)
                    : base(service)
                {
                    ProjectId = projectId;
                    InitParameters();
                }


                /// <summary>Required. The ID of the Cloud Platform project that the job belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }

                /// <summary>The view to retrieve. Defaults to METADATA_ONLY.</summary>
                [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ViewEnum> View { get; set; }

                /// <summary>The view to retrieve. Defaults to METADATA_ONLY.</summary>
                public enum ViewEnum
                {
                    [Google.Apis.Util.StringValueAttribute("METADATA_ONLY")]
                    METADATAONLY,
                }

                /// <summary>Required. A Cloud Storage path to the template from which to create the job. Must be a
                /// valid Cloud Storage URL, beginning with `gs://`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("gcsPath", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string GcsPath { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1b3/projects/{projectId}/templates:get"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "view", new Google.Apis.Discovery.Parameter
                        {
                            Name = "view",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "gcsPath", new Google.Apis.Discovery.Parameter
                        {
                            Name = "gcsPath",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Launch a template.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="projectId">Required. The ID of the Cloud Platform project that the job belongs to.</param>
            public virtual LaunchRequest Launch(Google.Apis.Dataflow.v1b3.Data.LaunchTemplateParameters body, string projectId)
            {
                return new LaunchRequest(service, body, projectId);
            }

            /// <summary>Launch a template.</summary>
            public class LaunchRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.LaunchTemplateResponse>
            {
                /// <summary>Constructs a new Launch request.</summary>
                public LaunchRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.LaunchTemplateParameters body, string projectId)
                    : base(service)
                {
                    ProjectId = projectId;
                    Body = body;
                    InitParameters();
                }


                /// <summary>Required. The ID of the Cloud Platform project that the job belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ProjectId { get; private set; }

                /// <summary>Required. A Cloud Storage path to the template from which to create the job. Must be valid
                /// Cloud Storage URL, beginning with 'gs://'.</summary>
                [Google.Apis.Util.RequestParameterAttribute("gcsPath", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string GcsPath { get; set; }

                /// <summary>Whether or not the job should actually be executed after validating parameters. Defaults to
                /// false. Validation errors do not cause the HTTP request to fail if true.</summary>
                [Google.Apis.Util.RequestParameterAttribute("dryRun", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<bool> DryRun { get; set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Dataflow.v1b3.Data.LaunchTemplateParameters Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "launch"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1b3/projects/{projectId}/templates:launch"; }
                }

                /// <summary>Initializes Launch parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "projectId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "projectId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "gcsPath", new Google.Apis.Discovery.Parameter
                        {
                            Name = "gcsPath",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "dryRun", new Google.Apis.Discovery.Parameter
                        {
                            Name = "dryRun",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Send a worker_message to the service.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="projectId">The project to send the WorkerMessages to.</param>
        public virtual WorkerMessagesRequest WorkerMessages(Google.Apis.Dataflow.v1b3.Data.SendWorkerMessagesRequest body, string projectId)
        {
            return new WorkerMessagesRequest(service, body, projectId);
        }

        /// <summary>Send a worker_message to the service.</summary>
        public class WorkerMessagesRequest : DataflowBaseServiceRequest<Google.Apis.Dataflow.v1b3.Data.SendWorkerMessagesResponse>
        {
            /// <summary>Constructs a new WorkerMessages request.</summary>
            public WorkerMessagesRequest(Google.Apis.Services.IClientService service, Google.Apis.Dataflow.v1b3.Data.SendWorkerMessagesRequest body, string projectId)
                : base(service)
            {
                ProjectId = projectId;
                Body = body;
                InitParameters();
            }


            /// <summary>The project to send the WorkerMessages to.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProjectId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Dataflow.v1b3.Data.SendWorkerMessagesRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "workerMessages"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1b3/projects/{projectId}/WorkerMessages"; }
            }

            /// <summary>Initializes WorkerMessages parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.Dataflow.v1b3.Data
{    

    /// <summary>Obsolete in favor of ApproximateReportedProgress and ApproximateSplitRequest.</summary>
    public class ApproximateProgress : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Obsolete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("percentComplete")]
        public virtual System.Nullable<float> PercentComplete { get; set; } 

        /// <summary>Obsolete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual Position Position { get; set; } 

        /// <summary>Obsolete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("remainingTime")]
        public virtual object RemainingTime { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A progress measurement of a WorkItem by a worker.</summary>
    public class ApproximateReportedProgress : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Total amount of parallelism in the portion of input of this task that has already been consumed and
        /// is no longer active. In the first two examples above (see remaining_parallelism), the value should be 29 or
        /// 2 respectively.  The sum of remaining_parallelism and consumed_parallelism should equal the total amount of
        /// parallelism in this work item.  If specified, must be finite.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("consumedParallelism")]
        public virtual ReportedParallelism ConsumedParallelism { get; set; } 

        /// <summary>Completion as fraction of the input consumed, from 0.0 (beginning, nothing consumed), to 1.0 (end
        /// of the input, entire input consumed).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fractionConsumed")]
        public virtual System.Nullable<double> FractionConsumed { get; set; } 

        /// <summary>A Position within the work to represent a progress.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual Position Position { get; set; } 

        /// <summary>Total amount of parallelism in the input of this task that remains, (i.e. can be delegated to this
        /// task and any new tasks via dynamic splitting). Always at least 1 for non-finished work items and 0 for
        /// finished.
        ///
        /// "Amount of parallelism" refers to how many non-empty parts of the input can be read in parallel. This does
        /// not necessarily equal number of records. An input that can be read in parallel down to the individual
        /// records is called "perfectly splittable". An example of non-perfectly parallelizable input is a block-
        /// compressed file format where a block of records has to be read as a whole, but different blocks can be read
        /// in parallel.
        ///
        /// Examples: * If we are processing record #30 (starting at 1) out of 50 in a perfectly splittable 50-record
        /// input, this value should be 21 (20 remaining + 1 current). * If we are reading through block 3 in a block-
        /// compressed file consisting of 5 blocks, this value should be 3 (since blocks 4 and 5 can be processed in
        /// parallel by new tasks via dynamic splitting and the current task remains processing block 3). * If we are
        /// reading through the last block in a block-compressed file, or reading or processing the last record in a
        /// perfectly splittable input, this value should be 1, because apart from the current task, no additional
        /// remainder can be split off.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("remainingParallelism")]
        public virtual ReportedParallelism RemainingParallelism { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A suggestion by the service to the worker to dynamically split the WorkItem.</summary>
    public class ApproximateSplitRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A fraction at which to split the work item, from 0.0 (beginning of the input) to 1.0 (end of the
        /// input).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fractionConsumed")]
        public virtual System.Nullable<double> FractionConsumed { get; set; } 

        /// <summary>A Position at which to split the work item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual Position Position { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Settings for WorkerPool autoscaling.</summary>
    public class AutoscalingSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The algorithm to use for autoscaling.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("algorithm")]
        public virtual string Algorithm { get; set; } 

        /// <summary>The maximum number of workers to cap scaling at.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxNumWorkers")]
        public virtual System.Nullable<int> MaxNumWorkers { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Modeled after information exposed by /proc/stat.</summary>
    public class CPUTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Average CPU utilization rate (% non-idle cpu / second) since previous sample.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rate")]
        public virtual System.Nullable<double> Rate { get; set; } 

        /// <summary>Timestamp of the measurement.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual object Timestamp { get; set; } 

        /// <summary>Total active CPU time across all cores (ie., non-idle) in milliseconds since start-up.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalMs")]
        public virtual System.Nullable<ulong> TotalMs { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Description of an interstitial value between transforms in an execution stage.</summary>
    public class ComponentSource : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Dataflow service generated name for this source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>User name for the original user transform or collection with which this source is most closely
        /// associated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalTransformOrCollection")]
        public virtual string OriginalTransformOrCollection { get; set; } 

        /// <summary>Human-readable name for this transform; may be user or system generated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userName")]
        public virtual string UserName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Description of a transform executed as part of an execution stage.</summary>
    public class ComponentTransform : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Dataflow service generated name for this source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>User name for the original user transform with which this transform is most closely
        /// associated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalTransform")]
        public virtual string OriginalTransform { get; set; } 

        /// <summary>Human-readable name for this transform; may be user or system generated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userName")]
        public virtual string UserName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>All configuration data for a particular Computation.</summary>
    public class ComputationTopology : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("computationId")]
        public virtual string ComputationId { get; set; } 

        /// <summary>The inputs to the computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputs")]
        public virtual System.Collections.Generic.IList<StreamLocation> Inputs { get; set; } 

        /// <summary>The key ranges processed by the computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("keyRanges")]
        public virtual System.Collections.Generic.IList<KeyRangeLocation> KeyRanges { get; set; } 

        /// <summary>The outputs from the computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outputs")]
        public virtual System.Collections.Generic.IList<StreamLocation> Outputs { get; set; } 

        /// <summary>The state family values.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stateFamilies")]
        public virtual System.Collections.Generic.IList<StateFamilyConfig> StateFamilies { get; set; } 

        /// <summary>The system stage name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("systemStageName")]
        public virtual string SystemStageName { get; set; } 

        /// <summary>The user stage name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userStageName")]
        public virtual string UserStageName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A position that encapsulates an inner position and an index for the inner position. A ConcatPosition
    /// can be used by a reader of a source that encapsulates a set of other sources.</summary>
    public class ConcatPosition : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Index of the inner source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("index")]
        public virtual System.Nullable<int> Index { get; set; } 

        /// <summary>Position within the inner source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual Position Position { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>CounterMetadata includes all static non-name non-value counter attributes.</summary>
    public class CounterMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Human-readable description of the counter semantics.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Counter aggregation kind.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>A string referring to the unit type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("otherUnits")]
        public virtual string OtherUnits { get; set; } 

        /// <summary>System defined Units, see above enum.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("standardUnits")]
        public virtual string StandardUnits { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Identifies a counter within a per-job namespace. Counters whose structured names are the same get
    /// merged into a single value for the job.</summary>
    public class CounterStructuredName : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Name of the optimized step being executed by the workers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("componentStepName")]
        public virtual string ComponentStepName { get; set; } 

        /// <summary>Name of the stage. An execution step contains multiple component steps.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("executionStepName")]
        public virtual string ExecutionStepName { get; set; } 

        /// <summary>Counter name. Not necessarily globally-unique, but unique within the context of the other fields.
        /// Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>One of the standard Origins defined above.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("origin")]
        public virtual string Origin { get; set; } 

        /// <summary>A string containing a more specific namespace of the counter's origin.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originNamespace")]
        public virtual string OriginNamespace { get; set; } 

        /// <summary>System generated name of the original step in the user's graph, before optimization.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalStepName")]
        public virtual string OriginalStepName { get; set; } 

        /// <summary>Portion of this counter, either key or value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("portion")]
        public virtual string Portion { get; set; } 

        /// <summary>ID of a particular worker.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerId")]
        public virtual string WorkerId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single message which encapsulates structured name and metadata for a given counter.</summary>
    public class CounterStructuredNameAndMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata associated with a counter</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual CounterMetadata Metadata { get; set; } 

        /// <summary>Structured name of the counter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual CounterStructuredName Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An update to a Counter sent from a worker.</summary>
    public class CounterUpdate : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Boolean value for And, Or.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("boolean")]
        public virtual System.Nullable<bool> Boolean { get; set; } 

        /// <summary>True if this counter is reported as the total cumulative aggregate value accumulated since the
        /// worker started working on this WorkItem. By default this is false, indicating that this counter is reported
        /// as a delta.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cumulative")]
        public virtual System.Nullable<bool> Cumulative { get; set; } 

        /// <summary>Distribution data</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("distribution")]
        public virtual DistributionUpdate Distribution { get; set; } 

        /// <summary>Floating point value for Sum, Max, Min.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("floatingPoint")]
        public virtual System.Nullable<double> FloatingPoint { get; set; } 

        /// <summary>List of floating point numbers, for Set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("floatingPointList")]
        public virtual FloatingPointList FloatingPointList { get; set; } 

        /// <summary>Floating point mean aggregation value for Mean.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("floatingPointMean")]
        public virtual FloatingPointMean FloatingPointMean { get; set; } 

        /// <summary>Integer value for Sum, Max, Min.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("integer")]
        public virtual SplitInt64 Integer { get; set; } 

        /// <summary>List of integers, for Set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("integerList")]
        public virtual IntegerList IntegerList { get; set; } 

        /// <summary>Integer mean aggregation value for Mean.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("integerMean")]
        public virtual IntegerMean IntegerMean { get; set; } 

        /// <summary>Value for internally-defined counters used by the Dataflow service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("internal")]
        public virtual object Internal__ { get; set; } 

        /// <summary>Counter name and aggregation type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nameAndKind")]
        public virtual NameAndKind NameAndKind { get; set; } 

        /// <summary>The service-generated short identifier for this counter. The short_id -> (name, metadata) mapping
        /// is constant for the lifetime of a job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shortId")]
        public virtual System.Nullable<long> ShortId { get; set; } 

        /// <summary>List of strings, for Set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stringList")]
        public virtual StringList StringList { get; set; } 

        /// <summary>Counter structured name and metadata.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("structuredNameAndMetadata")]
        public virtual CounterStructuredNameAndMetadata StructuredNameAndMetadata { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A request to create a Cloud Dataflow job from a template.</summary>
    public class CreateJobFromTemplateRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The runtime environment for the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("environment")]
        public virtual RuntimeEnvironment Environment { get; set; } 

        /// <summary>Required. A Cloud Storage path to the template from which to create the job. Must be a valid Cloud
        /// Storage URL, beginning with `gs://`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gcsPath")]
        public virtual string GcsPath { get; set; } 

        /// <summary>Required. The job name to use for the created job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobName")]
        public virtual string JobName { get; set; } 

        /// <summary>The runtime parameters to pass to the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameters")]
        public virtual System.Collections.Generic.IDictionary<string,string> Parameters { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Identifies the location of a custom souce.</summary>
    public class CustomSourceLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether this source is stateful.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stateful")]
        public virtual System.Nullable<bool> Stateful { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Data disk assignment for a given VM instance.</summary>
    public class DataDiskAssignment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Mounted data disks. The order is important a data disk's 0-based index in this list defines which
        /// persistent directory the disk is mounted to, for example the list of {
        /// "myproject-1014-104817-4c2-harness-0-disk-0" }, { "myproject-1014-104817-4c2-harness-0-disk-1" }.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataDisks")]
        public virtual System.Collections.Generic.IList<string> DataDisks { get; set; } 

        /// <summary>VM instance name the data disks mounted to, for example
        /// "myproject-1014-104817-4c2-harness-0".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("vmInstance")]
        public virtual string VmInstance { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Specification of one of the bundles produced as a result of splitting a Source (e.g. when executing a
    /// SourceSplitRequest, or when splitting an active task using WorkItemStatus.dynamic_source_split), relative to the
    /// source being split.</summary>
    public class DerivedSource : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>What source to base the produced source on (if any).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("derivationMode")]
        public virtual string DerivationMode { get; set; } 

        /// <summary>Specification of the source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual Source Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes the data disk used by a workflow job.</summary>
    public class Disk : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Disk storage type, as defined by Google Compute Engine.  This must be a disk type appropriate to
        /// the project and zone in which the workers will run.  If unknown or unspecified, the service will attempt to
        /// choose a reasonable default.
        ///
        /// For example, the standard persistent disk type is a resource name typically ending in "pd-standard".  If SSD
        /// persistent disks are available, the resource name typically ends with "pd-ssd".  The actual valid values are
        /// defined the Google Compute Engine API, not by the Cloud Dataflow API; consult the Google Compute Engine
        /// documentation for more information about determining the set of available disk types for a particular
        /// project and zone.
        ///
        /// Google Compute Engine Disk types are local to a particular project in a particular zone, and so the resource
        /// name will typically look something like this:
        ///
        /// compute.googleapis.com/projects/project-id/zones/zone/diskTypes/pd-standard</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("diskType")]
        public virtual string DiskType { get; set; } 

        /// <summary>Directory in a VM where disk is mounted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mountPoint")]
        public virtual string MountPoint { get; set; } 

        /// <summary>Size of disk in GB.  If zero or unspecified, the service will attempt to choose a reasonable
        /// default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sizeGb")]
        public virtual System.Nullable<int> SizeGb { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Data provided with a pipeline or transform to provide descriptive info.</summary>
    public class DisplayData : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Contains value if the data is of a boolean type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("boolValue")]
        public virtual System.Nullable<bool> BoolValue { get; set; } 

        /// <summary>Contains value if the data is of duration type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("durationValue")]
        public virtual object DurationValue { get; set; } 

        /// <summary>Contains value if the data is of float type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("floatValue")]
        public virtual System.Nullable<float> FloatValue { get; set; } 

        /// <summary>Contains value if the data is of int64 type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("int64Value")]
        public virtual System.Nullable<long> Int64Value { get; set; } 

        /// <summary>Contains value if the data is of java class type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("javaClassValue")]
        public virtual string JavaClassValue { get; set; } 

        /// <summary>The key identifying the display data. This is intended to be used as a label for the display data
        /// when viewed in a dax monitoring system.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        /// <summary>An optional label to display in a dax UI for the element.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("label")]
        public virtual string Label { get; set; } 

        /// <summary>The namespace for the key. This is usually a class name or programming language namespace (i.e.
        /// python module) which defines the display data. This allows a dax monitoring system to specially handle the
        /// data and perform custom rendering.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namespace")]
        public virtual string Namespace__ { get; set; } 

        /// <summary>A possible additional shorter value to display. For example a java_class_name_value of
        /// com.mypackage.MyDoFn will be stored with MyDoFn as the short_str_value and com.mypackage.MyDoFn as the
        /// java_class_name value. short_str_value can be displayed and java_class_name_value will be displayed as a
        /// tooltip.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shortStrValue")]
        public virtual string ShortStrValue { get; set; } 

        /// <summary>Contains value if the data is of string type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("strValue")]
        public virtual string StrValue { get; set; } 

        /// <summary>Contains value if the data is of timestamp type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestampValue")]
        public virtual object TimestampValue { get; set; } 

        /// <summary>An optional full URL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A metric value representing a distribution.</summary>
    public class DistributionUpdate : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The count of the number of elements present in the distribution.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("count")]
        public virtual SplitInt64 Count { get; set; } 

        /// <summary>The maximum value present in the distribution.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("max")]
        public virtual SplitInt64 Max { get; set; } 

        /// <summary>The minimum value present in the distribution.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("min")]
        public virtual SplitInt64 Min { get; set; } 

        /// <summary>Use an int64 since we'd prefer the added precision. If overflow is a common problem we can detect
        /// it and use an additional int64 or a double.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sum")]
        public virtual SplitInt64 Sum { get; set; } 

        /// <summary>Use a double since the sum of squares is likely to overflow int64.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sumOfSquares")]
        public virtual System.Nullable<double> SumOfSquares { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>When a task splits using WorkItemStatus.dynamic_source_split, this message describes the two parts of
    /// the split relative to the description of the current task's input.</summary>
    public class DynamicSourceSplit : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Primary part (continued to be processed by worker). Specified relative to the previously-current
        /// source. Becomes current.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("primary")]
        public virtual DerivedSource Primary { get; set; } 

        /// <summary>Residual part (returned to the pool of work). Specified relative to the previously-current
        /// source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("residual")]
        public virtual DerivedSource Residual { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes the environment in which a Dataflow Job runs.</summary>
    public class Environment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The type of cluster manager API to use.  If unknown or unspecified, the service will attempt to
        /// choose a reasonable default.  This should be in the form of the API service name, e.g.
        /// "compute.googleapis.com".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clusterManagerApiService")]
        public virtual string ClusterManagerApiService { get; set; } 

        /// <summary>The dataset for the current project where various workflow related tables are stored.
        ///
        /// The supported resource type is:
        ///
        /// Google BigQuery: bigquery.googleapis.com/{dataset}</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataset")]
        public virtual string Dataset { get; set; } 

        /// <summary>The list of experiments to enable.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("experiments")]
        public virtual System.Collections.Generic.IList<string> Experiments { get; set; } 

        /// <summary>Experimental settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("internalExperiments")]
        public virtual System.Collections.Generic.IDictionary<string,object> InternalExperiments { get; set; } 

        /// <summary>The Cloud Dataflow SDK pipeline options specified by the user. These options are passed through the
        /// service and are used to recreate the SDK pipeline options on the worker in a language agnostic and platform
        /// independent way.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sdkPipelineOptions")]
        public virtual System.Collections.Generic.IDictionary<string,object> SdkPipelineOptions { get; set; } 

        /// <summary>Identity to run virtual machines as. Defaults to the default account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceAccountEmail")]
        public virtual string ServiceAccountEmail { get; set; } 

        /// <summary>The prefix of the resources the system should use for temporary storage.  The system will append
        /// the suffix "/temp-{JOBNAME} to this resource prefix, where {JOBNAME} is the value of the job_name field.
        /// The resulting bucket and object prefix is used as the prefix of the resources used to store temporary data
        /// needed during the job execution.  NOTE: This will override the value in taskrunner_settings. The supported
        /// resource type is:
        ///
        /// Google Cloud Storage:
        ///
        /// storage.googleapis.com/{bucket}/{object} bucket.storage.googleapis.com/{object}</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tempStoragePrefix")]
        public virtual string TempStoragePrefix { get; set; } 

        /// <summary>A description of the process that generated the request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userAgent")]
        public virtual System.Collections.Generic.IDictionary<string,object> UserAgent { get; set; } 

        /// <summary>A structure describing which components and their versions of the service are required in order to
        /// run the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual System.Collections.Generic.IDictionary<string,object> Version { get; set; } 

        /// <summary>The worker pools. At least one "harness" worker pool must be specified in order for the job to have
        /// workers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerPools")]
        public virtual System.Collections.Generic.IList<WorkerPool> WorkerPools { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Description of the composing transforms, names/ids, and input/outputs of a stage of execution.  Some
    /// composing transforms and sources may have been generated by the Dataflow service during execution
    /// planning.</summary>
    public class ExecutionStageSummary : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Collections produced and consumed by component transforms of this stage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("componentSource")]
        public virtual System.Collections.Generic.IList<ComponentSource> ComponentSource { get; set; } 

        /// <summary>Transforms that comprise this execution stage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("componentTransform")]
        public virtual System.Collections.Generic.IList<ComponentTransform> ComponentTransform { get; set; } 

        /// <summary>Dataflow service generated id for this stage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Input sources for this stage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputSource")]
        public virtual System.Collections.Generic.IList<StageSource> InputSource { get; set; } 

        /// <summary>Type of tranform this stage is executing.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Dataflow service generated name for this stage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Output sources for this stage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outputSource")]
        public virtual System.Collections.Generic.IList<StageSource> OutputSource { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Indicates which location failed to respond to a request for data.</summary>
    public class FailedLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the failed location.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An instruction that copies its inputs (zero or more) to its (single) output.</summary>
    public class FlattenInstruction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Describes the inputs to the flatten instruction.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputs")]
        public virtual System.Collections.Generic.IList<InstructionInput> Inputs { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A metric value representing a list of floating point numbers.</summary>
    public class FloatingPointList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Elements of the list.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("elements")]
        public virtual System.Collections.Generic.IList<System.Nullable<double>> Elements { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A representation of a floating point mean metric contribution.</summary>
    public class FloatingPointMean : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of values being aggregated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("count")]
        public virtual SplitInt64 Count { get; set; } 

        /// <summary>The sum of all values being aggregated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sum")]
        public virtual System.Nullable<double> Sum { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request to get updated debug configuration for component.</summary>
    public class GetDebugConfigRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The internal component id for which debug configuration is requested.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("componentId")]
        public virtual string ComponentId { get; set; } 

        /// <summary>The worker id, i.e., VM hostname.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerId")]
        public virtual string WorkerId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to a get debug configuration request.</summary>
    public class GetDebugConfigResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The encoded debug configuration for the requested component.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("config")]
        public virtual string Config { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response to a GetTemplate request.</summary>
    public class GetTemplateResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The template metadata describing the template name, available parameters, etc.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual TemplateMetadata Metadata { get; set; } 

        /// <summary>The status of the get template request. Any problems with the request will be indicated in the
        /// error_details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual Status Status { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An input of an instruction, as a reference to an output of a producer instruction.</summary>
    public class InstructionInput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The output index (origin zero) within the producer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outputNum")]
        public virtual System.Nullable<int> OutputNum { get; set; } 

        /// <summary>The index (origin zero) of the parallel instruction that produces the output to be consumed by this
        /// input.  This index is relative to the list of instructions in this input's instruction's containing
        /// MapTask.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("producerInstructionIndex")]
        public virtual System.Nullable<int> ProducerInstructionIndex { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An output of an instruction.</summary>
    public class InstructionOutput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The codec to use to encode data being written via this output.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("codec")]
        public virtual System.Collections.Generic.IDictionary<string,object> Codec { get; set; } 

        /// <summary>The user-provided name of this output.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>For system-generated byte and mean byte metrics, certain instructions should only report the key
        /// size.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("onlyCountKeyBytes")]
        public virtual System.Nullable<bool> OnlyCountKeyBytes { get; set; } 

        /// <summary>For system-generated byte and mean byte metrics, certain instructions should only report the value
        /// size.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("onlyCountValueBytes")]
        public virtual System.Nullable<bool> OnlyCountValueBytes { get; set; } 

        /// <summary>System-defined name for this output in the original workflow graph. Outputs that do not contribute
        /// to an original instruction do not set this.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalName")]
        public virtual string OriginalName { get; set; } 

        /// <summary>System-defined name of this output. Unique across the workflow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("systemName")]
        public virtual string SystemName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A metric value representing a list of integers.</summary>
    public class IntegerList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Elements of the list.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("elements")]
        public virtual System.Collections.Generic.IList<SplitInt64> Elements { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A representation of an integer mean metric contribution.</summary>
    public class IntegerMean : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of values being aggregated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("count")]
        public virtual SplitInt64 Count { get; set; } 

        /// <summary>The sum of all values being aggregated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sum")]
        public virtual SplitInt64 Sum { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Defines a job to be run by the Cloud Dataflow service.</summary>
    public class Job : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The client's unique identifier of the job, re-used across retried attempts. If this field is set,
        /// the service will ensure its uniqueness. The request to create a job will fail if the service has knowledge
        /// of a previously submitted job with the same client's ID and job name. The caller may use this field to
        /// ensure idempotence of job creation across retried attempts to create a job. By default, the field is empty
        /// and, in that case, the service ignores it.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clientRequestId")]
        public virtual string ClientRequestId { get; set; } 

        /// <summary>The timestamp when the job was initially created. Immutable and set by the Cloud Dataflow
        /// service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>The current state of the job.
        ///
        /// Jobs are created in the `JOB_STATE_STOPPED` state unless otherwise specified.
        ///
        /// A job in the `JOB_STATE_RUNNING` state may asynchronously enter a terminal state. After a job has reached a
        /// terminal state, no further state updates may be made.
        ///
        /// This field may be mutated by the Cloud Dataflow service; callers cannot mutate it.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentState")]
        public virtual string CurrentState { get; set; } 

        /// <summary>The timestamp associated with the current state.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentStateTime")]
        public virtual object CurrentStateTime { get; set; } 

        /// <summary>The environment for the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("environment")]
        public virtual Environment Environment { get; set; } 

        /// <summary>Deprecated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("executionInfo")]
        public virtual JobExecutionInfo ExecutionInfo { get; set; } 

        /// <summary>The unique ID of this job.
        ///
        /// This field is set by the Cloud Dataflow service when the Job is created, and is immutable for the life of
        /// the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>User-defined labels for this job.
        ///
        /// The labels map can contain no more than 64 entries.  Entries of the labels map are UTF8 strings that comply
        /// with the following restrictions:
        ///
        /// * Keys must conform to regexp:  \p{Ll}\p{Lo}{0,62} * Values must conform to regexp:
        /// [\p{Ll}\p{Lo}\p{N}_-]{0,63} * Both keys and values are additionally constrained to be <= 128 bytes in
        /// size.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IDictionary<string,string> Labels { get; set; } 

        /// <summary>The location that contains this job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual string Location { get; set; } 

        /// <summary>The user-specified Cloud Dataflow job name.
        ///
        /// Only one Job with a given name may exist in a project at any given time. If a caller attempts to create a
        /// Job with the same name as an already-existing Job, the attempt returns the existing Job.
        ///
        /// The name must match the regular expression `[a-z]([-a-z0-9]{0,38}[a-z0-9])?`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Preliminary field: The format of this data may change at any time. A description of the user
        /// pipeline and stages through which it is executed. Created by Cloud Dataflow service.  Only retrieved with
        /// JOB_VIEW_DESCRIPTION or JOB_VIEW_ALL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pipelineDescription")]
        public virtual PipelineDescription PipelineDescription { get; set; } 

        /// <summary>The ID of the Cloud Platform project that the job belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>If this job is an update of an existing job, this field is the job ID of the job it replaced.
        ///
        /// When sending a `CreateJobRequest`, you can update a job by specifying it here. The job named here is
        /// stopped, and its intermediate state is transferred to this job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("replaceJobId")]
        public virtual string ReplaceJobId { get; set; } 

        /// <summary>If another job is an update of this job (and thus, this job is in `JOB_STATE_UPDATED`), this field
        /// contains the ID of that job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("replacedByJobId")]
        public virtual string ReplacedByJobId { get; set; } 

        /// <summary>The job's requested state.
        ///
        /// `UpdateJob` may be used to switch between the `JOB_STATE_STOPPED` and `JOB_STATE_RUNNING` states, by setting
        /// requested_state.  `UpdateJob` may also be used to directly set a job's requested state to
        /// `JOB_STATE_CANCELLED` or `JOB_STATE_DONE`, irrevocably terminating the job if it has not already reached a
        /// terminal state.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestedState")]
        public virtual string RequestedState { get; set; } 

        /// <summary>The top-level steps that constitute the entire job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("steps")]
        public virtual System.Collections.Generic.IList<Step> Steps { get; set; } 

        /// <summary>A set of files the system should be aware of that are used for temporary storage. These temporary
        /// files will be removed on job completion. No duplicates are allowed. No file patterns are supported.
        ///
        /// The supported files are:
        ///
        /// Google Cloud Storage:
        ///
        /// storage.googleapis.com/{bucket}/{object} bucket.storage.googleapis.com/{object}</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tempFiles")]
        public virtual System.Collections.Generic.IList<string> TempFiles { get; set; } 

        /// <summary>The map of transform name prefixes of the job to be replaced to the corresponding name prefixes of
        /// the new job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("transformNameMapping")]
        public virtual System.Collections.Generic.IDictionary<string,string> TransformNameMapping { get; set; } 

        /// <summary>The type of Cloud Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Additional information about how a Cloud Dataflow job will be executed that isn't contained in the
    /// submitted job.</summary>
    public class JobExecutionInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A mapping from each stage to the information about that stage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stages")]
        public virtual System.Collections.Generic.IDictionary<string,JobExecutionStageInfo> Stages { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Contains information about how a particular google.dataflow.v1beta3.Step will be executed.</summary>
    public class JobExecutionStageInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The steps associated with the execution stage. Note that stages may have several steps, and that a
        /// given step might be run by more than one stage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stepName")]
        public virtual System.Collections.Generic.IList<string> StepName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A particular message pertaining to a Dataflow job.</summary>
    public class JobMessage : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Identifies the message.  This is automatically generated by the service; the caller should treat it
        /// as an opaque string.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Importance level of the message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("messageImportance")]
        public virtual string MessageImportance { get; set; } 

        /// <summary>The text of the message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("messageText")]
        public virtual string MessageText { get; set; } 

        /// <summary>The timestamp of the message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("time")]
        public virtual object Time { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>JobMetrics contains a collection of metrics descibing the detailed progress of a Dataflow job. Metrics
    /// correspond to user-defined and system-defined metrics in the job.
    ///
    /// This resource captures only the most recent values of each metric; time-series data can be queried for them
    /// (under the same metric names) from Cloud Monitoring.</summary>
    public class JobMetrics : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Timestamp as of which metric values are current.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metricTime")]
        public virtual object MetricTime { get; set; } 

        /// <summary>All metrics for this job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metrics")]
        public virtual System.Collections.Generic.IList<MetricUpdate> Metrics { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Data disk assignment information for a specific key-range of a sharded computation. Currently we only
    /// support UTF-8 character splits to simplify encoding into JSON.</summary>
    public class KeyRangeDataDiskAssignment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the data disk where data for this range is stored. This name is local to the Google
        /// Cloud Platform project and uniquely identifies the disk within that project, for example
        /// "myproject-1014-104817-4c2-harness-0-disk-1".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataDisk")]
        public virtual string DataDisk { get; set; } 

        /// <summary>The end (exclusive) of the key range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual string End { get; set; } 

        /// <summary>The start (inclusive) of the key range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual string Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Location information for a specific key-range of a sharded computation. Currently we only support UTF-8
    /// character splits to simplify encoding into JSON.</summary>
    public class KeyRangeLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the data disk where data for this range is stored. This name is local to the Google
        /// Cloud Platform project and uniquely identifies the disk within that project, for example
        /// "myproject-1014-104817-4c2-harness-0-disk-1".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataDisk")]
        public virtual string DataDisk { get; set; } 

        /// <summary>The physical location of this range assignment to be used for streaming computation cross-worker
        /// message delivery.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryEndpoint")]
        public virtual string DeliveryEndpoint { get; set; } 

        /// <summary>DEPRECATED. The location of the persistent state for this range, as a persistent directory in the
        /// worker local filesystem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deprecatedPersistentDirectory")]
        public virtual string DeprecatedPersistentDirectory { get; set; } 

        /// <summary>The end (exclusive) of the key range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual string End { get; set; } 

        /// <summary>The start (inclusive) of the key range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual string Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Parameters to provide to the template being launched.</summary>
    public class LaunchTemplateParameters : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The runtime environment for the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("environment")]
        public virtual RuntimeEnvironment Environment { get; set; } 

        /// <summary>Required. The job name to use for the created job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobName")]
        public virtual string JobName { get; set; } 

        /// <summary>The runtime parameters to pass to the job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameters")]
        public virtual System.Collections.Generic.IDictionary<string,string> Parameters { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to the request to launch a template.</summary>
    public class LaunchTemplateResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The job that was launched, if the request was not a dry run and the job was successfully
        /// launched.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("job")]
        public virtual Job Job { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request to lease WorkItems.</summary>
    public class LeaseWorkItemRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The current timestamp at the worker.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentWorkerTime")]
        public virtual object CurrentWorkerTime { get; set; } 

        /// <summary>The location which contains the WorkItem's job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual string Location { get; set; } 

        /// <summary>The initial lease period.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestedLeaseDuration")]
        public virtual object RequestedLeaseDuration { get; set; } 

        /// <summary>Filter for WorkItem type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workItemTypes")]
        public virtual System.Collections.Generic.IList<string> WorkItemTypes { get; set; } 

        /// <summary>Worker capabilities. WorkItems might be limited to workers with specific capabilities.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerCapabilities")]
        public virtual System.Collections.Generic.IList<string> WorkerCapabilities { get; set; } 

        /// <summary>Identifies the worker leasing work -- typically the ID of the virtual machine running the
        /// worker.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerId")]
        public virtual string WorkerId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to a request to lease WorkItems.</summary>
    public class LeaseWorkItemResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of the leased WorkItems.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workItems")]
        public virtual System.Collections.Generic.IList<WorkItem> WorkItems { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to a request to list job messages.</summary>
    public class ListJobMessagesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Messages in ascending timestamp order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobMessages")]
        public virtual System.Collections.Generic.IList<JobMessage> JobMessages { get; set; } 

        /// <summary>The token to obtain the next page of results if there are more.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to a request to list Cloud Dataflow jobs.  This may be a partial response, depending on the
    /// page size in the ListJobsRequest.</summary>
    public class ListJobsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Zero or more messages describing locations that failed to respond.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("failedLocation")]
        public virtual System.Collections.Generic.IList<FailedLocation> FailedLocation { get; set; } 

        /// <summary>A subset of the requested job information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobs")]
        public virtual System.Collections.Generic.IList<Job> Jobs { get; set; } 

        /// <summary>Set if there may be more results than fit in this response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>MapTask consists of an ordered set of instructions, each of which describes one particular low-level
    /// operation for the worker to perform in order to accomplish the MapTask's WorkItem.
    ///
    /// Each instruction must appear in the list before any instructions which depends on its output.</summary>
    public class MapTask : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The instructions in the MapTask.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instructions")]
        public virtual System.Collections.Generic.IList<ParallelInstruction> Instructions { get; set; } 

        /// <summary>System-defined name of the stage containing this MapTask. Unique across the workflow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stageName")]
        public virtual string StageName { get; set; } 

        /// <summary>System-defined name of this MapTask. Unique across the workflow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("systemName")]
        public virtual string SystemName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The metric short id is returned to the user alongside an offset into
    /// ReportWorkItemStatusRequest</summary>
    public class MetricShortId : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The index of the corresponding metric in the ReportWorkItemStatusRequest. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metricIndex")]
        public virtual System.Nullable<int> MetricIndex { get; set; } 

        /// <summary>The service-generated short identifier for the metric.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shortId")]
        public virtual System.Nullable<long> ShortId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Identifies a metric, by describing the source which generated the metric.</summary>
    public class MetricStructuredName : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Zero or more labeled fields which identify the part of the job this metric is associated with, such
        /// as the name of a step or collection.
        ///
        /// For example, built-in counters associated with steps will have context['step'] = . Counters associated with
        /// PCollections in the SDK will have context['pcollection'] = .</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("context")]
        public virtual System.Collections.Generic.IDictionary<string,string> Context { get; set; } 

        /// <summary>Worker-defined metric name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Origin (namespace) of metric name. May be blank for user-define metrics; will be "dataflow" for
        /// metrics defined by the Dataflow service or SDK.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("origin")]
        public virtual string Origin { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes the state of a metric.</summary>
    public class MetricUpdate : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if this metric is reported as the total cumulative aggregate value accumulated since the
        /// worker started working on this WorkItem. By default this is false, indicating that this metric is reported
        /// as a delta that is not associated with any WorkItem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cumulative")]
        public virtual System.Nullable<bool> Cumulative { get; set; } 

        /// <summary>Worker-computed aggregate value for internal use by the Dataflow service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("internal")]
        public virtual object Internal__ { get; set; } 

        /// <summary>Metric aggregation kind.  The possible metric aggregation kinds are "Sum", "Max", "Min", "Mean",
        /// "Set", "And", and "Or". The specified aggregation kind is case-insensitive.
        ///
        /// If omitted, this is not an aggregated value but instead a single metric sample value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Worker-computed aggregate value for the "Mean" aggregation kind. This holds the count of the
        /// aggregated values and is used in combination with mean_sum above to obtain the actual mean aggregate value.
        /// The only possible value type is Long.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("meanCount")]
        public virtual object MeanCount { get; set; } 

        /// <summary>Worker-computed aggregate value for the "Mean" aggregation kind. This holds the sum of the
        /// aggregated values and is used in combination with mean_count below to obtain the actual mean aggregate
        /// value. The only possible value types are Long and Double.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("meanSum")]
        public virtual object MeanSum { get; set; } 

        /// <summary>Name of the metric.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual MetricStructuredName Name { get; set; } 

        /// <summary>Worker-computed aggregate value for aggregation kinds "Sum", "Max", "Min", "And", and "Or".  The
        /// possible value types are Long, Double, and Boolean.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("scalar")]
        public virtual object Scalar { get; set; } 

        /// <summary>Worker-computed aggregate value for the "Set" aggregation kind.  The only possible value type is a
        /// list of Values whose type can be Long, Double, or String, according to the metric's type.  All Values in the
        /// list must be of the same type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("set")]
        public virtual object Set { get; set; } 

        /// <summary>Timestamp associated with the metric value. Optional when workers are reporting work progress; it
        /// will be filled in responses from the metrics API.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateTime")]
        public virtual object UpdateTime { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes mounted data disk.</summary>
    public class MountedDataDisk : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the data disk. This name is local to the Google Cloud Platform project and uniquely
        /// identifies the disk within that project, for example "myproject-1014-104817-4c2-harness-0-disk-1".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataDisk")]
        public virtual string DataDisk { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Information about an output of a multi-output DoFn.</summary>
    public class MultiOutputInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The id of the tag the user code will emit to this output by; this should correspond to the tag of
        /// some SideInputInfo.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tag")]
        public virtual string Tag { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Basic metadata about a counter.</summary>
    public class NameAndKind : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Counter aggregation kind.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Name of the counter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The packages that must be installed in order for a worker to run the steps of the Cloud Dataflow job
    /// that will be assigned to its worker pool.
    ///
    /// This is the mechanism by which the Cloud Dataflow SDK causes code to be loaded onto the workers. For example,
    /// the Cloud Dataflow Java SDK might use this to install jars containing the user's code and all of the various
    /// dependencies (libraries, data files, etc.) required in order for that code to run.</summary>
    public class Package : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The resource to read the package from. The supported resource type is:
        ///
        /// Google Cloud Storage:
        ///
        /// storage.googleapis.com/{bucket} bucket.storage.googleapis.com/</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual string Location { get; set; } 

        /// <summary>The name of the package.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An instruction that does a ParDo operation. Takes one main input and zero or more side inputs, and
    /// produces zero or more outputs. Runs user code.</summary>
    public class ParDoInstruction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The input.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("input")]
        public virtual InstructionInput Input { get; set; } 

        /// <summary>Information about each of the outputs, if user_fn is a  MultiDoFn.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("multiOutputInfos")]
        public virtual System.Collections.Generic.IList<MultiOutputInfo> MultiOutputInfos { get; set; } 

        /// <summary>The number of outputs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numOutputs")]
        public virtual System.Nullable<int> NumOutputs { get; set; } 

        /// <summary>Zero or more side inputs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sideInputs")]
        public virtual System.Collections.Generic.IList<SideInputInfo> SideInputs { get; set; } 

        /// <summary>The user function to invoke.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userFn")]
        public virtual System.Collections.Generic.IDictionary<string,object> UserFn { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes a particular operation comprising a MapTask.</summary>
    public class ParallelInstruction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Additional information for Flatten instructions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("flatten")]
        public virtual FlattenInstruction Flatten { get; set; } 

        /// <summary>User-provided name of this operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>System-defined name for the operation in the original workflow graph.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalName")]
        public virtual string OriginalName { get; set; } 

        /// <summary>Describes the outputs of the instruction.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outputs")]
        public virtual System.Collections.Generic.IList<InstructionOutput> Outputs { get; set; } 

        /// <summary>Additional information for ParDo instructions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parDo")]
        public virtual ParDoInstruction ParDo { get; set; } 

        /// <summary>Additional information for PartialGroupByKey instructions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("partialGroupByKey")]
        public virtual PartialGroupByKeyInstruction PartialGroupByKey { get; set; } 

        /// <summary>Additional information for Read instructions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("read")]
        public virtual ReadInstruction Read { get; set; } 

        /// <summary>System-defined name of this operation. Unique across the workflow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("systemName")]
        public virtual string SystemName { get; set; } 

        /// <summary>Additional information for Write instructions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("write")]
        public virtual WriteInstruction Write { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Metadata for a specific parameter.</summary>
    public class ParameterMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The help text to display for the parameter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("helpText")]
        public virtual string HelpText { get; set; } 

        /// <summary>Optional. Whether the parameter is optional. Defaults to false.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isOptional")]
        public virtual System.Nullable<bool> IsOptional { get; set; } 

        /// <summary>Required. The label to display for the parameter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("label")]
        public virtual string Label { get; set; } 

        /// <summary>Required. The name of the parameter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Optional. Regexes that the parameter must match.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regexes")]
        public virtual System.Collections.Generic.IList<string> Regexes { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An instruction that does a partial group-by-key. One input and one output.</summary>
    public class PartialGroupByKeyInstruction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Describes the input to the partial group-by-key instruction.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("input")]
        public virtual InstructionInput Input { get; set; } 

        /// <summary>The codec to use for interpreting an element in the input PTable.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputElementCodec")]
        public virtual System.Collections.Generic.IDictionary<string,object> InputElementCodec { get; set; } 

        /// <summary>If this instruction includes a combining function this is the name of the intermediate store
        /// between the GBK and the CombineValues.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalCombineValuesInputStoreName")]
        public virtual string OriginalCombineValuesInputStoreName { get; set; } 

        /// <summary>If this instruction includes a combining function, this is the name of the CombineValues
        /// instruction lifted into this instruction.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalCombineValuesStepName")]
        public virtual string OriginalCombineValuesStepName { get; set; } 

        /// <summary>Zero or more side inputs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sideInputs")]
        public virtual System.Collections.Generic.IList<SideInputInfo> SideInputs { get; set; } 

        /// <summary>The value combining function to invoke.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valueCombiningFn")]
        public virtual System.Collections.Generic.IDictionary<string,object> ValueCombiningFn { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A descriptive representation of submitted pipeline as well as the executed form.  This data is provided
    /// by the Dataflow service for ease of visualizing the pipeline and interpretting Dataflow provided
    /// metrics.</summary>
    public class PipelineDescription : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Pipeline level display data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayData")]
        public virtual System.Collections.Generic.IList<DisplayData> DisplayData { get; set; } 

        /// <summary>Description of each stage of execution of the pipeline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("executionPipelineStage")]
        public virtual System.Collections.Generic.IList<ExecutionStageSummary> ExecutionPipelineStage { get; set; } 

        /// <summary>Description of each transform in the pipeline and collections between them.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalPipelineTransform")]
        public virtual System.Collections.Generic.IList<TransformSummary> OriginalPipelineTransform { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Position defines a position within a collection of data.  The value can be either the end position, a
    /// key (used with ordered collections), a byte offset, or a record index.</summary>
    public class Position : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Position is a byte offset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("byteOffset")]
        public virtual System.Nullable<long> ByteOffset { get; set; } 

        /// <summary>CloudPosition is a concat position.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("concatPosition")]
        public virtual ConcatPosition ConcatPosition { get; set; } 

        /// <summary>Position is past all other positions. Also useful for the end position of an unbounded
        /// range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<bool> End { get; set; } 

        /// <summary>Position is a string key, ordered lexicographically.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        /// <summary>Position is a record index.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("recordIndex")]
        public virtual System.Nullable<long> RecordIndex { get; set; } 

        /// <summary>CloudPosition is a base64 encoded BatchShufflePosition (with FIXED sharding).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shufflePosition")]
        public virtual string ShufflePosition { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Identifies a pubsub location to use for transferring data into or out of a streaming Dataflow
    /// job.</summary>
    public class PubsubLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Indicates whether the pipeline allows late-arriving data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dropLateData")]
        public virtual System.Nullable<bool> DropLateData { get; set; } 

        /// <summary>If set, contains a pubsub label from which to extract record ids. If left empty, record
        /// deduplication will be strictly best effort.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("idLabel")]
        public virtual string IdLabel { get; set; } 

        /// <summary>A pubsub subscription, in the form of "pubsub.googleapis.com/subscriptions//"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subscription")]
        public virtual string Subscription { get; set; } 

        /// <summary>If set, contains a pubsub label from which to extract record timestamps. If left empty, record
        /// timestamps will be generated upon arrival.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestampLabel")]
        public virtual string TimestampLabel { get; set; } 

        /// <summary>A pubsub topic, in the form of "pubsub.googleapis.com/topics//"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("topic")]
        public virtual string Topic { get; set; } 

        /// <summary>If set, specifies the pubsub subscription that will be used for tracking custom time timestamps for
        /// watermark estimation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trackingSubscription")]
        public virtual string TrackingSubscription { get; set; } 

        /// <summary>If true, then the client has requested to get pubsub attributes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("withAttributes")]
        public virtual System.Nullable<bool> WithAttributes { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An instruction that reads records. Takes no inputs, produces one output.</summary>
    public class ReadInstruction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The source to read from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual Source Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request to report the status of WorkItems.</summary>
    public class ReportWorkItemStatusRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The current timestamp at the worker.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currentWorkerTime")]
        public virtual object CurrentWorkerTime { get; set; } 

        /// <summary>The location which contains the WorkItem's job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("location")]
        public virtual string Location { get; set; } 

        /// <summary>The order is unimportant, except that the order of the WorkItemServiceState messages in the
        /// ReportWorkItemStatusResponse corresponds to the order of WorkItemStatus messages here.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workItemStatuses")]
        public virtual System.Collections.Generic.IList<WorkItemStatus> WorkItemStatuses { get; set; } 

        /// <summary>The ID of the worker reporting the WorkItem status.  If this does not match the ID of the worker
        /// which the Dataflow service believes currently has the lease on the WorkItem, the report will be dropped
        /// (with an error response).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerId")]
        public virtual string WorkerId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response from a request to report the status of WorkItems.</summary>
    public class ReportWorkItemStatusResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A set of messages indicating the service-side state for each WorkItem whose status was reported, in
        /// the same order as the WorkItemStatus messages in the ReportWorkItemStatusRequest which resulting in this
        /// response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workItemServiceStates")]
        public virtual System.Collections.Generic.IList<WorkItemServiceState> WorkItemServiceStates { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents the level of parallelism in a WorkItem's input, reported by the worker.</summary>
    public class ReportedParallelism : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies whether the parallelism is infinite. If true, "value" is ignored. Infinite parallelism
        /// means the service will assume that the work item can always be split into more non-empty work items by
        /// dynamic splitting. This is a work-around for lack of support for infinity by the current JSON-based Java RPC
        /// stack.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isInfinite")]
        public virtual System.Nullable<bool> IsInfinite { get; set; } 

        /// <summary>Specifies the level of parallelism in case it is finite.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<double> Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Worker metrics exported from workers. This contains resource utilization metrics accumulated from a
    /// variety of sources. For more information, see go/df-resource-signals.</summary>
    public class ResourceUtilizationReport : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>CPU utilization samples.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cpuTime")]
        public virtual System.Collections.Generic.IList<CPUTime> CpuTime { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Service-side response to WorkerMessage reporting resource utilization.</summary>
    public class ResourceUtilizationReportResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The environment values to set at runtime.</summary>
    public class RuntimeEnvironment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether to bypass the safety checks for the job's temporary directory. Use with caution.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bypassTempDirValidation")]
        public virtual System.Nullable<bool> BypassTempDirValidation { get; set; } 

        /// <summary>The maximum number of Google Compute Engine instances to be made available to your pipeline during
        /// execution, from 1 to 1000.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxWorkers")]
        public virtual System.Nullable<int> MaxWorkers { get; set; } 

        /// <summary>The email address of the service account to run the job as.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceAccountEmail")]
        public virtual string ServiceAccountEmail { get; set; } 

        /// <summary>The Cloud Storage path to use for temporary files. Must be a valid Cloud Storage URL, beginning
        /// with `gs://`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tempLocation")]
        public virtual string TempLocation { get; set; } 

        /// <summary>The Compute Engine [availability zone](https://cloud.google.com/compute/docs/regions-zones/regions-
        /// zones) for launching worker instances to run your pipeline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request to send encoded debug information.</summary>
    public class SendDebugCaptureRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The internal component id for which debug information is sent.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("componentId")]
        public virtual string ComponentId { get; set; } 

        /// <summary>The encoded debug information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("data")]
        public virtual string Data { get; set; } 

        /// <summary>The worker id, i.e., VM hostname.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerId")]
        public virtual string WorkerId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response to a send capture request. nothing</summary>
    public class SendDebugCaptureResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A request for sending worker messages to the service.</summary>
    public class SendWorkerMessagesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The WorkerMessages to send.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerMessages")]
        public virtual System.Collections.Generic.IList<WorkerMessage> WorkerMessages { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response to the worker messages.</summary>
    public class SendWorkerMessagesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The servers response to the worker messages.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerMessageResponses")]
        public virtual System.Collections.Generic.IList<WorkerMessageResponse> WorkerMessageResponses { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes a particular function to invoke.</summary>
    public class SeqMapTask : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Information about each of the inputs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputs")]
        public virtual System.Collections.Generic.IList<SideInputInfo> Inputs { get; set; } 

        /// <summary>The user-provided name of the SeqDo operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Information about each of the outputs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outputInfos")]
        public virtual System.Collections.Generic.IList<SeqMapTaskOutputInfo> OutputInfos { get; set; } 

        /// <summary>System-defined name of the stage containing the SeqDo operation. Unique across the
        /// workflow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stageName")]
        public virtual string StageName { get; set; } 

        /// <summary>System-defined name of the SeqDo operation. Unique across the workflow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("systemName")]
        public virtual string SystemName { get; set; } 

        /// <summary>The user function to invoke.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userFn")]
        public virtual System.Collections.Generic.IDictionary<string,object> UserFn { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Information about an output of a SeqMapTask.</summary>
    public class SeqMapTaskOutputInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The sink to write the output value to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sink")]
        public virtual Sink Sink { get; set; } 

        /// <summary>The id of the TupleTag the user code will tag the output value by.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tag")]
        public virtual string Tag { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A task which consists of a shell command for the worker to execute.</summary>
    public class ShellTask : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The shell command to run.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("command")]
        public virtual string Command { get; set; } 

        /// <summary>Exit code for the task.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("exitCode")]
        public virtual System.Nullable<int> ExitCode { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Information about a side input of a DoFn or an input of a SeqDoFn.</summary>
    public class SideInputInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>How to interpret the source element(s) as a side input value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual System.Collections.Generic.IDictionary<string,object> Kind { get; set; } 

        /// <summary>The source(s) to read element(s) from to get the value of this side input. If more than one source,
        /// then the elements are taken from the sources, in the specified order if order matters. At least one source
        /// is required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sources")]
        public virtual System.Collections.Generic.IList<Source> Sources { get; set; } 

        /// <summary>The id of the tag the user code will access this side input by; this should correspond to the tag
        /// of some MultiOutputInfo.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tag")]
        public virtual string Tag { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A sink that records can be encoded and written to.</summary>
    public class Sink : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The codec to use to encode data written to the sink.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("codec")]
        public virtual System.Collections.Generic.IDictionary<string,object> Codec { get; set; } 

        /// <summary>The sink to write to, plus its parameters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spec")]
        public virtual System.Collections.Generic.IDictionary<string,object> Spec { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A source that records can be read and decoded from.</summary>
    public class Source : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>While splitting, sources may specify the produced bundles as differences against another source, in
        /// order to save backend-side memory and allow bigger jobs. For details, see SourceSplitRequest. To support
        /// this use case, the full set of parameters of the source is logically obtained by taking the latest
        /// explicitly specified value of each parameter in the order: base_specs (later items win), spec (overrides
        /// anything in base_specs).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("baseSpecs")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> BaseSpecs { get; set; } 

        /// <summary>The codec to use to decode data read from the source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("codec")]
        public virtual System.Collections.Generic.IDictionary<string,object> Codec { get; set; } 

        /// <summary>Setting this value to true hints to the framework that the source doesn't need splitting, and using
        /// SourceSplitRequest on it would yield SOURCE_SPLIT_OUTCOME_USE_CURRENT.
        ///
        /// E.g. a file splitter may set this to true when splitting a single file into a set of byte ranges of
        /// appropriate size, and set this to false when splitting a filepattern into individual files. However, for
        /// efficiency, a file splitter may decide to produce file subranges directly from the filepattern to avoid a
        /// splitting round-trip.
        ///
        /// See SourceSplitRequest for an overview of the splitting process.
        ///
        /// This field is meaningful only in the Source objects populated by the user (e.g. when filling in a
        /// DerivedSource). Source objects supplied by the framework to the user don't have this field
        /// populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("doesNotNeedSplitting")]
        public virtual System.Nullable<bool> DoesNotNeedSplitting { get; set; } 

        /// <summary>Optionally, metadata for this source can be supplied right away, avoiding a
        /// SourceGetMetadataOperation roundtrip (see SourceOperationRequest).
        ///
        /// This field is meaningful only in the Source objects populated by the user (e.g. when filling in a
        /// DerivedSource). Source objects supplied by the framework to the user don't have this field
        /// populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual SourceMetadata Metadata { get; set; } 

        /// <summary>The source to read from, plus its parameters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spec")]
        public virtual System.Collections.Generic.IDictionary<string,object> Spec { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>DEPRECATED in favor of DynamicSourceSplit.</summary>
    public class SourceFork : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>DEPRECATED</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("primary")]
        public virtual SourceSplitShard Primary { get; set; } 

        /// <summary>DEPRECATED</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("primarySource")]
        public virtual DerivedSource PrimarySource { get; set; } 

        /// <summary>DEPRECATED</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("residual")]
        public virtual SourceSplitShard Residual { get; set; } 

        /// <summary>DEPRECATED</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("residualSource")]
        public virtual DerivedSource ResidualSource { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A request to compute the SourceMetadata of a Source.</summary>
    public class SourceGetMetadataRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specification of the source whose metadata should be computed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual Source Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of a SourceGetMetadataOperation.</summary>
    public class SourceGetMetadataResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The computed metadata.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual SourceMetadata Metadata { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Metadata about a Source useful for automatically optimizing and tuning the pipeline, etc.</summary>
    public class SourceMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An estimate of the total size (in bytes) of the data that would be read from this source.  This
        /// estimate is in terms of external storage size, before any decompression or other processing done by the
        /// reader.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("estimatedSizeBytes")]
        public virtual System.Nullable<long> EstimatedSizeBytes { get; set; } 

        /// <summary>Specifies that the size of this source is known to be infinite (this is a streaming
        /// source).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("infinite")]
        public virtual System.Nullable<bool> Infinite { get; set; } 

        /// <summary>Whether this source is known to produce key/value pairs with the (encoded) keys in
        /// lexicographically sorted order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("producesSortedKeys")]
        public virtual System.Nullable<bool> ProducesSortedKeys { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A work item that represents the different operations that can be performed on a user-defined Source
    /// specification.</summary>
    public class SourceOperationRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Information about a request to get metadata about a source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("getMetadata")]
        public virtual SourceGetMetadataRequest GetMetadata { get; set; } 

        /// <summary>Information about a request to split a source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("split")]
        public virtual SourceSplitRequest Split { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of a SourceOperationRequest, specified in ReportWorkItemStatusRequest.source_operation when
    /// the work item is completed.</summary>
    public class SourceOperationResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A response to a request to get metadata about a source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("getMetadata")]
        public virtual SourceGetMetadataResponse GetMetadata { get; set; } 

        /// <summary>A response to a request to split a source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("split")]
        public virtual SourceSplitResponse Split { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Hints for splitting a Source into bundles (parts for parallel processing) using
    /// SourceSplitRequest.</summary>
    public class SourceSplitOptions : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The source should be split into a set of bundles where the estimated size of each is approximately
        /// this many bytes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredBundleSizeBytes")]
        public virtual System.Nullable<long> DesiredBundleSizeBytes { get; set; } 

        /// <summary>DEPRECATED in favor of desired_bundle_size_bytes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("desiredShardSizeBytes")]
        public virtual System.Nullable<long> DesiredShardSizeBytes { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents the operation to split a high-level Source specification into bundles (parts for parallel
    /// processing).
    ///
    /// At a high level, splitting of a source into bundles happens as follows: SourceSplitRequest is applied to the
    /// source. If it returns SOURCE_SPLIT_OUTCOME_USE_CURRENT, no further splitting happens and the source is used "as
    /// is". Otherwise, splitting is applied recursively to each produced DerivedSource.
    ///
    /// As an optimization, for any Source, if its does_not_need_splitting is true, the framework assumes that splitting
    /// this source would return SOURCE_SPLIT_OUTCOME_USE_CURRENT, and doesn't initiate a SourceSplitRequest. This
    /// applies both to the initial source being split and to bundles produced from it.</summary>
    public class SourceSplitRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Hints for tuning the splitting process.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual SourceSplitOptions Options { get; set; } 

        /// <summary>Specification of the source to be split.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual Source Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response to a SourceSplitRequest.</summary>
    public class SourceSplitResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If outcome is SPLITTING_HAPPENED, then this is a list of bundles into which the source was split.
        /// Otherwise this field is ignored. This list can be empty, which means the source represents an empty
        /// input.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bundles")]
        public virtual System.Collections.Generic.IList<DerivedSource> Bundles { get; set; } 

        /// <summary>Indicates whether splitting happened and produced a list of bundles. If this is
        /// USE_CURRENT_SOURCE_AS_IS, the current source should be processed "as is" without splitting. "bundles" is
        /// ignored in this case. If this is SPLITTING_HAPPENED, then "bundles" contains a list of bundles into which
        /// the source was split.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outcome")]
        public virtual string Outcome { get; set; } 

        /// <summary>DEPRECATED in favor of bundles.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shards")]
        public virtual System.Collections.Generic.IList<SourceSplitShard> Shards { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>DEPRECATED in favor of DerivedSource.</summary>
    public class SourceSplitShard : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>DEPRECATED</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("derivationMode")]
        public virtual string DerivationMode { get; set; } 

        /// <summary>DEPRECATED</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual Source Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A representation of an int64, n, that is immune to precision loss when encoded in JSON.</summary>
    public class SplitInt64 : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The high order bits, including the sign: n >> 32.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("highBits")]
        public virtual System.Nullable<int> HighBits { get; set; } 

        /// <summary>The low order bits: n & 0xffffffff.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lowBits")]
        public virtual System.Nullable<long> LowBits { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Description of an input or output of an execution stage.</summary>
    public class StageSource : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Dataflow service generated name for this source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>User name for the original user transform or collection with which this source is most closely
        /// associated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originalTransformOrCollection")]
        public virtual string OriginalTransformOrCollection { get; set; } 

        /// <summary>Size of the source, if measurable.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sizeBytes")]
        public virtual System.Nullable<long> SizeBytes { get; set; } 

        /// <summary>Human-readable name for this source; may be user or system generated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userName")]
        public virtual string UserName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>State family configuration.</summary>
    public class StateFamilyConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If true, this family corresponds to a read operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isRead")]
        public virtual System.Nullable<bool> IsRead { get; set; } 

        /// <summary>The state family value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stateFamily")]
        public virtual string StateFamily { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The `Status` type defines a logical error model that is suitable for different programming
    /// environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model
    /// is designed to be:
    ///
    /// - Simple to use and understand for most users - Flexible enough to meet unexpected needs
    ///
    /// # Overview
    ///
    /// The `Status` message contains three pieces of data: error code, error message, and error details. The error code
    /// should be an enum value of google.rpc.Code, but it may accept additional error codes if needed.  The error
    /// message should be a developer-facing English message that helps developers *understand* and *resolve* the error.
    /// If a localized user-facing error message is needed, put the localized message in the error details or localize
    /// it in the client. The optional error details may contain arbitrary information about the error. There is a
    /// predefined set of error detail types in the package `google.rpc` which can be used for common error conditions.
    ///
    /// # Language mapping
    ///
    /// The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire
    /// format. When the `Status` message is exposed in different client libraries and different wire protocols, it can
    /// be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped
    /// to some error codes in C.
    ///
    /// # Other uses
    ///
    /// The error model and the `Status` message can be used in a variety of environments, either with or without APIs,
    /// to provide a consistent developer experience across different environments.
    ///
    /// Example uses of this error model include:
    ///
    /// - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the
    /// normal response to indicate the partial errors.
    ///
    /// - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error
    /// reporting purpose.
    ///
    /// - Batch operations. If a client uses batch request and batch response, the `Status` message should be used
    /// directly inside batch response, one for each error sub-response.
    ///
    /// - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of
    /// those operations should be represented directly using the `Status` message.
    ///
    /// - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any
    /// stripping needed for security/privacy reasons.</summary>
    public class Status : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The status code, which should be an enum value of google.rpc.Code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<int> Code { get; set; } 

        /// <summary>A list of messages that carry the error details.  There will be a common set of message types for
        /// APIs to use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("details")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> Details { get; set; } 

        /// <summary>A developer-facing error message, which should be in English. Any user-facing error message should
        /// be localized and sent in the google.rpc.Status.details field, or localized by the client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Defines a particular step within a Cloud Dataflow job.
    ///
    /// A job consists of multiple steps, each of which performs some specific operation as part of the overall job.
    /// Data is typically passed from one step to another as part of the job.
    ///
    /// Here's an example of a sequence of steps which together implement a Map-Reduce job:
    ///
    /// * Read a collection of data from some source, parsing the collection's elements.
    ///
    /// * Validate the elements.
    ///
    /// * Apply a user-defined function to map each element to some value and extract an element-specific key value.
    ///
    /// * Group elements with the same key into a single element with that key, transforming a multiply-keyed collection
    /// into a uniquely-keyed collection.
    ///
    /// * Write the elements out to some data sink.
    ///
    /// Note that the Cloud Dataflow service may be used to run many different types of jobs, not just Map-
    /// Reduce.</summary>
    public class Step : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The kind of step in the Cloud Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The name that identifies the step. This must be unique for each step with respect to all other
        /// steps in the Cloud Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Named properties associated with the step. Each kind of predefined step has its own required set of
        /// properties. Must be provided on Create.  Only retrieved with JOB_VIEW_ALL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual System.Collections.Generic.IDictionary<string,object> Properties { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes a stream of data, either as input to be processed or as output of a streaming Dataflow
    /// job.</summary>
    public class StreamLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The stream is a custom source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customSourceLocation")]
        public virtual CustomSourceLocation CustomSourceLocation { get; set; } 

        /// <summary>The stream is a pubsub stream.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pubsubLocation")]
        public virtual PubsubLocation PubsubLocation { get; set; } 

        /// <summary>The stream is a streaming side input.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sideInputLocation")]
        public virtual StreamingSideInputLocation SideInputLocation { get; set; } 

        /// <summary>The stream is part of another computation within the current streaming Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streamingStageLocation")]
        public virtual StreamingStageLocation StreamingStageLocation { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Configuration information for a single streaming computation.</summary>
    public class StreamingComputationConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Unique identifier for this computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("computationId")]
        public virtual string ComputationId { get; set; } 

        /// <summary>Instructions that comprise the computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instructions")]
        public virtual System.Collections.Generic.IList<ParallelInstruction> Instructions { get; set; } 

        /// <summary>Stage name of this computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stageName")]
        public virtual string StageName { get; set; } 

        /// <summary>System defined name for this computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("systemName")]
        public virtual string SystemName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes full or partial data disk assignment information of the computation ranges.</summary>
    public class StreamingComputationRanges : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("computationId")]
        public virtual string ComputationId { get; set; } 

        /// <summary>Data disk assignments for ranges from this computation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rangeAssignments")]
        public virtual System.Collections.Generic.IList<KeyRangeDataDiskAssignment> RangeAssignments { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A task which describes what action should be performed for the specified streaming computation
    /// ranges.</summary>
    public class StreamingComputationTask : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Contains ranges of a streaming computation this task should apply to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("computationRanges")]
        public virtual System.Collections.Generic.IList<StreamingComputationRanges> ComputationRanges { get; set; } 

        /// <summary>Describes the set of data disks this task should apply to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataDisks")]
        public virtual System.Collections.Generic.IList<MountedDataDisk> DataDisks { get; set; } 

        /// <summary>A type of streaming computation task.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("taskType")]
        public virtual string TaskType { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A task that carries configuration information for streaming computations.</summary>
    public class StreamingConfigTask : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Set of computation configuration information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streamingComputationConfigs")]
        public virtual System.Collections.Generic.IList<StreamingComputationConfig> StreamingComputationConfigs { get; set; } 

        /// <summary>Map from user step names to state families.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userStepToStateFamilyNameMap")]
        public virtual System.Collections.Generic.IDictionary<string,string> UserStepToStateFamilyNameMap { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A task which initializes part of a streaming Dataflow job.</summary>
    public class StreamingSetupTask : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The user has requested drain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("drain")]
        public virtual System.Nullable<bool> Drain { get; set; } 

        /// <summary>The TCP port on which the worker should listen for messages from other streaming computation
        /// workers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("receiveWorkPort")]
        public virtual System.Nullable<int> ReceiveWorkPort { get; set; } 

        /// <summary>The global topology of the streaming Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streamingComputationTopology")]
        public virtual TopologyConfig StreamingComputationTopology { get; set; } 

        /// <summary>The TCP port used by the worker to communicate with the Dataflow worker harness.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerHarnessPort")]
        public virtual System.Nullable<int> WorkerHarnessPort { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Identifies the location of a streaming side input.</summary>
    public class StreamingSideInputLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Identifies the state family where this side input is stored.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stateFamily")]
        public virtual string StateFamily { get; set; } 

        /// <summary>Identifies the particular side input within the streaming Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tag")]
        public virtual string Tag { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Identifies the location of a streaming computation stage, for stage-to-stage communication.</summary>
    public class StreamingStageLocation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Identifies the particular stream within the streaming Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streamId")]
        public virtual string StreamId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A metric value representing a list of strings.</summary>
    public class StringList : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Elements of the list.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("elements")]
        public virtual System.Collections.Generic.IList<string> Elements { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Taskrunner configuration settings.</summary>
    public class TaskRunnerSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether to also send taskrunner log info to stderr.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alsologtostderr")]
        public virtual System.Nullable<bool> Alsologtostderr { get; set; } 

        /// <summary>The location on the worker for task-specific subdirectories.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("baseTaskDir")]
        public virtual string BaseTaskDir { get; set; } 

        /// <summary>The base URL for the taskrunner to use when accessing Google Cloud APIs.
        ///
        /// When workers access Google Cloud APIs, they logically do so via relative URLs.  If this field is specified,
        /// it supplies the base URL to use for resolving these relative URLs.  The normative algorithm used is defined
        /// by RFC 1808, "Relative Uniform Resource Locators".
        ///
        /// If not specified, the default value is "http://www.googleapis.com/"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("baseUrl")]
        public virtual string BaseUrl { get; set; } 

        /// <summary>The file to store preprocessing commands in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("commandlinesFileName")]
        public virtual string CommandlinesFileName { get; set; } 

        /// <summary>Whether to continue taskrunner if an exception is hit.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("continueOnException")]
        public virtual System.Nullable<bool> ContinueOnException { get; set; } 

        /// <summary>The API version of endpoint, e.g. "v1b3"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataflowApiVersion")]
        public virtual string DataflowApiVersion { get; set; } 

        /// <summary>The command to launch the worker harness.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("harnessCommand")]
        public virtual string HarnessCommand { get; set; } 

        /// <summary>The suggested backend language.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("languageHint")]
        public virtual string LanguageHint { get; set; } 

        /// <summary>The directory on the VM to store logs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logDir")]
        public virtual string LogDir { get; set; } 

        /// <summary>Whether to send taskrunner log info to Google Compute Engine VM serial console.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logToSerialconsole")]
        public virtual System.Nullable<bool> LogToSerialconsole { get; set; } 

        /// <summary>Indicates where to put logs.  If this is not specified, the logs will not be uploaded.
        ///
        /// The supported resource type is:
        ///
        /// Google Cloud Storage: storage.googleapis.com/{bucket}/{object}
        /// bucket.storage.googleapis.com/{object}</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("logUploadLocation")]
        public virtual string LogUploadLocation { get; set; } 

        /// <summary>The OAuth2 scopes to be requested by the taskrunner in order to access the Cloud Dataflow
        /// API.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oauthScopes")]
        public virtual System.Collections.Generic.IList<string> OauthScopes { get; set; } 

        /// <summary>The settings to pass to the parallel worker harness.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parallelWorkerSettings")]
        public virtual WorkerSettings ParallelWorkerSettings { get; set; } 

        /// <summary>The streaming worker main class name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streamingWorkerMainClass")]
        public virtual string StreamingWorkerMainClass { get; set; } 

        /// <summary>The UNIX group ID on the worker VM to use for tasks launched by taskrunner; e.g. "wheel".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("taskGroup")]
        public virtual string TaskGroup { get; set; } 

        /// <summary>The UNIX user ID on the worker VM to use for tasks launched by taskrunner; e.g. "root".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("taskUser")]
        public virtual string TaskUser { get; set; } 

        /// <summary>The prefix of the resources the taskrunner should use for temporary storage.
        ///
        /// The supported resource type is:
        ///
        /// Google Cloud Storage: storage.googleapis.com/{bucket}/{object}
        /// bucket.storage.googleapis.com/{object}</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tempStoragePrefix")]
        public virtual string TempStoragePrefix { get; set; } 

        /// <summary>The ID string of the VM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("vmId")]
        public virtual string VmId { get; set; } 

        /// <summary>The file to store the workflow in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workflowFileName")]
        public virtual string WorkflowFileName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Metadata describing a template.</summary>
    public class TemplateMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If true, will bypass the validation that the temp directory is writable. This should only be used
        /// with templates for pipelines that are guaranteed not to need to write to the temp directory, which is
        /// subject to change based on the optimizer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bypassTempDirValidation")]
        public virtual System.Nullable<bool> BypassTempDirValidation { get; set; } 

        /// <summary>Optional. A description of the template.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Required. The name of the template.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The parameters for the template.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameters")]
        public virtual System.Collections.Generic.IList<ParameterMetadata> Parameters { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Global topology of the streaming Dataflow job, including all computations and their sharded
    /// locations.</summary>
    public class TopologyConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The computations associated with a streaming Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("computations")]
        public virtual System.Collections.Generic.IList<ComputationTopology> Computations { get; set; } 

        /// <summary>The disks assigned to a streaming Dataflow job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataDiskAssignments")]
        public virtual System.Collections.Generic.IList<DataDiskAssignment> DataDiskAssignments { get; set; } 

        /// <summary>The size (in bits) of keys that will be assigned to source messages.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("forwardingKeyBits")]
        public virtual System.Nullable<int> ForwardingKeyBits { get; set; } 

        /// <summary>Version number for persistent state.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("persistentStateVersion")]
        public virtual System.Nullable<int> PersistentStateVersion { get; set; } 

        /// <summary>Maps user stage names to stable computation names.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userStageToComputationNameMap")]
        public virtual System.Collections.Generic.IDictionary<string,string> UserStageToComputationNameMap { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Description of the type, names/ids, and input/outputs for a transform.</summary>
    public class TransformSummary : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Transform-specific display data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayData")]
        public virtual System.Collections.Generic.IList<DisplayData> DisplayData { get; set; } 

        /// <summary>SDK generated id of this transform instance.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>User names for all collection inputs to this transform.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputCollectionName")]
        public virtual System.Collections.Generic.IList<string> InputCollectionName { get; set; } 

        /// <summary>Type of transform.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>User provided name for this transform instance.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>User  names for all collection outputs to this transform.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("outputCollectionName")]
        public virtual System.Collections.Generic.IList<string> OutputCollectionName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>WorkItem represents basic information about a WorkItem to be executed in the cloud.</summary>
    public class WorkItem : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Work item-specific configuration as an opaque blob.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("configuration")]
        public virtual string Configuration { get; set; } 

        /// <summary>Identifies this WorkItem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<long> Id { get; set; } 

        /// <summary>The initial index to use when reporting the status of the WorkItem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("initialReportIndex")]
        public virtual System.Nullable<long> InitialReportIndex { get; set; } 

        /// <summary>Identifies the workflow job this WorkItem belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("jobId")]
        public virtual string JobId { get; set; } 

        /// <summary>Time when the lease on this Work will expire.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("leaseExpireTime")]
        public virtual object LeaseExpireTime { get; set; } 

        /// <summary>Additional information for MapTask WorkItems.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mapTask")]
        public virtual MapTask MapTask { get; set; } 

        /// <summary>Any required packages that need to be fetched in order to execute this WorkItem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("packages")]
        public virtual System.Collections.Generic.IList<Package> Packages { get; set; } 

        /// <summary>Identifies the cloud project this WorkItem belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>Recommended reporting interval.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportStatusInterval")]
        public virtual object ReportStatusInterval { get; set; } 

        /// <summary>Additional information for SeqMapTask WorkItems.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seqMapTask")]
        public virtual SeqMapTask SeqMapTask { get; set; } 

        /// <summary>Additional information for ShellTask WorkItems.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shellTask")]
        public virtual ShellTask ShellTask { get; set; } 

        /// <summary>Additional information for source operation WorkItems.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceOperationTask")]
        public virtual SourceOperationRequest SourceOperationTask { get; set; } 

        /// <summary>Additional information for StreamingComputationTask WorkItems.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streamingComputationTask")]
        public virtual StreamingComputationTask StreamingComputationTask { get; set; } 

        /// <summary>Additional information for StreamingConfigTask WorkItems.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streamingConfigTask")]
        public virtual StreamingConfigTask StreamingConfigTask { get; set; } 

        /// <summary>Additional information for StreamingSetupTask WorkItems.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streamingSetupTask")]
        public virtual StreamingSetupTask StreamingSetupTask { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The Dataflow service's idea of the current state of a WorkItem being processed by a worker.</summary>
    public class WorkItemServiceState : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Other data returned by the service, specific to the particular worker harness.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("harnessData")]
        public virtual System.Collections.Generic.IDictionary<string,object> HarnessData { get; set; } 

        /// <summary>Time at which the current lease will expire.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("leaseExpireTime")]
        public virtual object LeaseExpireTime { get; set; } 

        /// <summary>The short ids that workers should use in subsequent metric updates. Workers should strive to use
        /// short ids whenever possible, but it is ok to request the short_id again if a worker lost track of it (e.g.
        /// if the worker is recovering from a crash). NOTE: it is possible that the response may have short ids for a
        /// subset of the metrics.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metricShortId")]
        public virtual System.Collections.Generic.IList<MetricShortId> MetricShortId { get; set; } 

        /// <summary>The index value to use for the next report sent by the worker. Note: If the report call fails for
        /// whatever reason, the worker should reuse this index for subsequent report attempts.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextReportIndex")]
        public virtual System.Nullable<long> NextReportIndex { get; set; } 

        /// <summary>New recommended reporting interval.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportStatusInterval")]
        public virtual object ReportStatusInterval { get; set; } 

        /// <summary>The progress point in the WorkItem where the Dataflow service suggests that the worker truncate the
        /// task.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("splitRequest")]
        public virtual ApproximateSplitRequest SplitRequest { get; set; } 

        /// <summary>DEPRECATED in favor of split_request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("suggestedStopPoint")]
        public virtual ApproximateProgress SuggestedStopPoint { get; set; } 

        /// <summary>Obsolete, always empty.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("suggestedStopPosition")]
        public virtual Position SuggestedStopPosition { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Conveys a worker's progress through the work described by a WorkItem.</summary>
    public class WorkItemStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the WorkItem was completed (successfully or unsuccessfully).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("completed")]
        public virtual System.Nullable<bool> Completed { get; set; } 

        /// <summary>Worker output counters for this WorkItem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("counterUpdates")]
        public virtual System.Collections.Generic.IList<CounterUpdate> CounterUpdates { get; set; } 

        /// <summary>See documentation of stop_position.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dynamicSourceSplit")]
        public virtual DynamicSourceSplit DynamicSourceSplit { get; set; } 

        /// <summary>Specifies errors which occurred during processing.  If errors are provided, and completed = true,
        /// then the WorkItem is considered to have failed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual System.Collections.Generic.IList<Status> Errors { get; set; } 

        /// <summary>DEPRECATED in favor of counter_updates.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metricUpdates")]
        public virtual System.Collections.Generic.IList<MetricUpdate> MetricUpdates { get; set; } 

        /// <summary>DEPRECATED in favor of reported_progress.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("progress")]
        public virtual ApproximateProgress Progress { get; set; } 

        /// <summary>The report index.  When a WorkItem is leased, the lease will contain an initial report index.  When
        /// a WorkItem's status is reported to the system, the report should be sent with that report index, and the
        /// response will contain the index the worker should use for the next report.  Reports received with unexpected
        /// index values will be rejected by the service.
        ///
        /// In order to preserve idempotency, the worker should not alter the contents of a report, even if the worker
        /// must submit the same report multiple times before getting back a response.  The worker should not submit a
        /// subsequent report until the response for the previous report had been received from the service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportIndex")]
        public virtual System.Nullable<long> ReportIndex { get; set; } 

        /// <summary>The worker's progress through this WorkItem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportedProgress")]
        public virtual ApproximateReportedProgress ReportedProgress { get; set; } 

        /// <summary>Amount of time the worker requests for its lease.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestedLeaseDuration")]
        public virtual object RequestedLeaseDuration { get; set; } 

        /// <summary>DEPRECATED in favor of dynamic_source_split.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceFork")]
        public virtual SourceFork SourceFork { get; set; } 

        /// <summary>If the work item represented a SourceOperationRequest, and the work is completed, contains the
        /// result of the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceOperationResponse")]
        public virtual SourceOperationResponse SourceOperationResponse { get; set; } 

        /// <summary>A worker may split an active map task in two parts, "primary" and "residual", continuing to process
        /// the primary part and returning the residual part into the pool of available work. This event is called a
        /// "dynamic split" and is critical to the dynamic work rebalancing feature. The two obtained sub-tasks are
        /// called "parts" of the split. The parts, if concatenated, must represent the same input as would be read by
        /// the current task if the split did not happen. The exact way in which the original task is decomposed into
        /// the two parts is specified either as a position demarcating them (stop_position), or explicitly as two
        /// DerivedSources, if this task consumes a user-defined source type (dynamic_source_split).
        ///
        /// The "current" task is adjusted as a result of the split: after a task with range [A, B) sends a
        /// stop_position update at C, its range is considered to be [A, C), e.g.: * Progress should be interpreted
        /// relative to the new range, e.g. "75% completed" means "75% of [A, C) completed" * The worker should
        /// interpret proposed_stop_position relative to the new range, e.g. "split at 68%" should be interpreted as
        /// "split at 68% of [A, C)". * If the worker chooses to split again using stop_position, only stop_positions in
        /// [A, C) will be accepted. * Etc. dynamic_source_split has similar semantics: e.g., if a task with source S
        /// splits using dynamic_source_split into {P, R} (where P and R must be together equivalent to S), then
        /// subsequent progress and proposed_stop_position should be interpreted relative to P, and in a potential
        /// subsequent dynamic_source_split into {P', R'}, P' and R' must be together equivalent to P, etc.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stopPosition")]
        public virtual Position StopPosition { get; set; } 

        /// <summary>Identifies the WorkItem.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workItemId")]
        public virtual string WorkItemId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>WorkerHealthReport contains information about the health of a worker.
    ///
    /// The VM should be identified by the labels attached to the WorkerMessage that this health ping belongs
    /// to.</summary>
    public class WorkerHealthReport : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The pods running on the worker. See: http://kubernetes.io/v1.1/docs/api-
        /// reference/v1/definitions.html#_v1_pod
        ///
        /// This field is used by the worker to send the status of the indvidual containers running on each
        /// worker.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pods")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> Pods { get; set; } 

        /// <summary>The interval at which the worker is sending health reports. The default value of 0 should be
        /// interpreted as the field is not being explicitly set by the worker.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportInterval")]
        public virtual object ReportInterval { get; set; } 

        /// <summary>Whether the VM is healthy.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("vmIsHealthy")]
        public virtual System.Nullable<bool> VmIsHealthy { get; set; } 

        /// <summary>The time the VM was booted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("vmStartupTime")]
        public virtual object VmStartupTime { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>WorkerHealthReportResponse contains information returned to the worker in response to a health
    /// ping.</summary>
    public class WorkerHealthReportResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A positive value indicates the worker should change its reporting interval to the specified value.
        ///
        /// The default value of zero means no change in report rate is requested by the server.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportInterval")]
        public virtual object ReportInterval { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>WorkerMessage provides information to the backend about a worker.</summary>
    public class WorkerMessage : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Labels are used to group WorkerMessages. For example, a worker_message about a particular container
        /// might have the labels: { "JOB_ID": "2015-04-22", "WORKER_ID": "wordcount-vm-2015…" "CONTAINER_TYPE":
        /// "worker", "CONTAINER_ID": "ac1234def"} Label tags typically correspond to Label enum values. However, for
        /// ease of development other strings can be used as tags. LABEL_UNSPECIFIED should not be used here.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IDictionary<string,string> Labels { get; set; } 

        /// <summary>The timestamp of the worker_message.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("time")]
        public virtual object Time { get; set; } 

        /// <summary>The health of a worker.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerHealthReport")]
        public virtual WorkerHealthReport WorkerHealthReport { get; set; } 

        /// <summary>A worker message code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerMessageCode")]
        public virtual WorkerMessageCode WorkerMessageCode { get; set; } 

        /// <summary>Resource metrics reported by workers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerMetrics")]
        public virtual ResourceUtilizationReport WorkerMetrics { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A message code is used to report status and error messages to the service. The message codes are
    /// intended to be machine readable. The service will take care of translating these into user understandable
    /// messages if necessary.
    ///
    /// Example use cases: 1. Worker processes reporting successful startup. 2. Worker processes reporting specific
    /// errors (e.g. package staging failure).</summary>
    public class WorkerMessageCode : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The code is a string intended for consumption by a machine that identifies the type of message
        /// being sent. Examples: 1. "HARNESS_STARTED" might be used to indicate the worker harness has started. 2.
        /// "GCS_DOWNLOAD_ERROR" might be used to indicate an error downloading a GCS file as part of the boot process
        /// of one of the worker containers.
        ///
        /// This is a string and not an enum to make it easy to add new codes without waiting for an API
        /// change.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; } 

        /// <summary>Parameters contains specific information about the code.
        ///
        /// This is a struct to allow parameters of different types.
        ///
        /// Examples: 1. For a "HARNESS_STARTED" message parameters might provide the name of the worker and additional
        /// data like timing information. 2. For a "GCS_DOWNLOAD_ERROR" parameters might contain fields listing the GCS
        /// objects being downloaded and fields containing errors.
        ///
        /// In general complex data structures should be avoided. If a worker needs to send a specific and complicated
        /// data structure then please consider defining a new proto and adding it to the data oneof in
        /// WorkerMessageResponse.
        ///
        /// Conventions: Parameters should only be used for information that isn't typically passed as a label. hostname
        /// and other worker identifiers should almost always be passed as labels since they will be included on most
        /// messages.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("parameters")]
        public virtual System.Collections.Generic.IDictionary<string,object> Parameters { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A worker_message response allows the server to pass information to the sender.</summary>
    public class WorkerMessageResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The service's response to a worker's health report.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerHealthReportResponse")]
        public virtual WorkerHealthReportResponse WorkerHealthReportResponse { get; set; } 

        /// <summary>Service's response to reporting worker metrics (currently empty).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerMetricsResponse")]
        public virtual ResourceUtilizationReportResponse WorkerMetricsResponse { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes one particular pool of Cloud Dataflow workers to be instantiated by the Cloud Dataflow
    /// service in order to perform the computations required by a job.  Note that a workflow job may use multiple
    /// pools, in order to match the various computational requirements of the various stages of the job.</summary>
    public class WorkerPool : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Settings for autoscaling of this WorkerPool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoscalingSettings")]
        public virtual AutoscalingSettings AutoscalingSettings { get; set; } 

        /// <summary>Data disks that are used by a VM in this workflow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataDisks")]
        public virtual System.Collections.Generic.IList<Disk> DataDisks { get; set; } 

        /// <summary>The default package set to install.  This allows the service to select a default set of packages
        /// which are useful to worker harnesses written in a particular language.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultPackageSet")]
        public virtual string DefaultPackageSet { get; set; } 

        /// <summary>Size of root disk for VMs, in GB.  If zero or unspecified, the service will attempt to choose a
        /// reasonable default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("diskSizeGb")]
        public virtual System.Nullable<int> DiskSizeGb { get; set; } 

        /// <summary>Fully qualified source image for disks.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("diskSourceImage")]
        public virtual string DiskSourceImage { get; set; } 

        /// <summary>Type of root disk for VMs.  If empty or unspecified, the service will attempt to choose a
        /// reasonable default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("diskType")]
        public virtual string DiskType { get; set; } 

        /// <summary>Configuration for VM IPs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ipConfiguration")]
        public virtual string IpConfiguration { get; set; } 

        /// <summary>The kind of the worker pool; currently only `harness` and `shuffle` are supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Machine type (e.g. "n1-standard-1").  If empty or unspecified, the service will attempt to choose a
        /// reasonable default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("machineType")]
        public virtual string MachineType { get; set; } 

        /// <summary>Metadata to set on the Google Compute Engine VMs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string,string> Metadata { get; set; } 

        /// <summary>Network to which VMs will be assigned.  If empty or unspecified, the service will use the network
        /// "default".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("network")]
        public virtual string Network { get; set; } 

        /// <summary>The number of threads per worker harness. If empty or unspecified, the service will choose a number
        /// of threads (according to the number of cores on the selected machine type for batch, or 1 by convention for
        /// streaming).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numThreadsPerWorker")]
        public virtual System.Nullable<int> NumThreadsPerWorker { get; set; } 

        /// <summary>Number of Google Compute Engine workers in this pool needed to execute the job.  If zero or
        /// unspecified, the service will attempt to choose a reasonable default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numWorkers")]
        public virtual System.Nullable<int> NumWorkers { get; set; } 

        /// <summary>The action to take on host maintenance, as defined by the Google Compute Engine API.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("onHostMaintenance")]
        public virtual string OnHostMaintenance { get; set; } 

        /// <summary>Packages to be installed on workers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("packages")]
        public virtual System.Collections.Generic.IList<Package> Packages { get; set; } 

        /// <summary>Extra arguments for this worker pool.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("poolArgs")]
        public virtual System.Collections.Generic.IDictionary<string,object> PoolArgs { get; set; } 

        /// <summary>Subnetwork to which VMs will be assigned, if desired.  Expected to be of the form
        /// "regions/REGION/subnetworks/SUBNETWORK".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subnetwork")]
        public virtual string Subnetwork { get; set; } 

        /// <summary>Settings passed through to Google Compute Engine workers when using the standard Dataflow task
        /// runner.  Users should ignore this field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("taskrunnerSettings")]
        public virtual TaskRunnerSettings TaskrunnerSettings { get; set; } 

        /// <summary>Sets the policy for determining when to turndown worker pool. Allowed values are:
        /// `TEARDOWN_ALWAYS`, `TEARDOWN_ON_SUCCESS`, and `TEARDOWN_NEVER`. `TEARDOWN_ALWAYS` means workers are always
        /// torn down regardless of whether the job succeeds. `TEARDOWN_ON_SUCCESS` means workers are torn down if the
        /// job succeeds. `TEARDOWN_NEVER` means the workers are never torn down.
        ///
        /// If the workers are not torn down by the service, they will continue to run and use Google Compute Engine VM
        /// resources in the user's project until they are explicitly terminated by the user. Because of this, Google
        /// recommends using the `TEARDOWN_ALWAYS` policy except for small, manually supervised test jobs.
        ///
        /// If unknown or unspecified, the service will attempt to choose a reasonable default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("teardownPolicy")]
        public virtual string TeardownPolicy { get; set; } 

        /// <summary>Required. Docker container image that executes the Cloud Dataflow worker harness, residing in
        /// Google Container Registry.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerHarnessContainerImage")]
        public virtual string WorkerHarnessContainerImage { get; set; } 

        /// <summary>Zone to run the worker pools in.  If empty or unspecified, the service will attempt to choose a
        /// reasonable default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Provides data to pass through to the worker harness.</summary>
    public class WorkerSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The base URL for accessing Google Cloud APIs.
        ///
        /// When workers access Google Cloud APIs, they logically do so via relative URLs.  If this field is specified,
        /// it supplies the base URL to use for resolving these relative URLs.  The normative algorithm used is defined
        /// by RFC 1808, "Relative Uniform Resource Locators".
        ///
        /// If not specified, the default value is "http://www.googleapis.com/"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("baseUrl")]
        public virtual string BaseUrl { get; set; } 

        /// <summary>Whether to send work progress updates to the service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportingEnabled")]
        public virtual System.Nullable<bool> ReportingEnabled { get; set; } 

        /// <summary>The Cloud Dataflow service path relative to the root URL, for example,
        /// "dataflow/v1b3/projects".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("servicePath")]
        public virtual string ServicePath { get; set; } 

        /// <summary>The Shuffle service path relative to the root URL, for example, "shuffle/v1beta1".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shuffleServicePath")]
        public virtual string ShuffleServicePath { get; set; } 

        /// <summary>The prefix of the resources the system should use for temporary storage.
        ///
        /// The supported resource type is:
        ///
        /// Google Cloud Storage:
        ///
        /// storage.googleapis.com/{bucket}/{object} bucket.storage.googleapis.com/{object}</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tempStoragePrefix")]
        public virtual string TempStoragePrefix { get; set; } 

        /// <summary>The ID of the worker running this pipeline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("workerId")]
        public virtual string WorkerId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An instruction that writes records. Takes one input, produces no outputs.</summary>
    public class WriteInstruction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The input.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("input")]
        public virtual InstructionInput Input { get; set; } 

        /// <summary>The sink to write to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sink")]
        public virtual Sink Sink { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
